【问题标题】:Javascript. How to detect when the window.document has changed?Javascript。如何检测 window.document 何时更改?
【发布时间】:2012-04-11 08:02:09
【问题描述】:

window.document 经常安静地改变,例如,当您从一个 url 移动到另一个 url 或调用 document.reload(true); 时

文档本身有一个完美的 readyState 和一个 readystatechange 事件来跟踪任何更改。但是,如果您为 readyState 事件在文档中添加 addEventListener 并且文档被更新,则 addEventListener 将不再存在并且永远不会调用该方法。

所以我喜欢在每次文档在窗口对象中更新时附加一个。那么有没有办法检测到呢?

【问题讨论】:

    标签: javascript window document


    【解决方案1】:

    您必须在每个网页中都有自己的 javascript,以便脚本可以在加载每个页面时重新安装事件处理程序,或者您必须通过可以监控每个页面的浏览器插件来执行此操作它已加载。

    从某种意义上说,当加载新页面时,页面中的所有脚本都会被清除,因此一个页面中的脚本不可能保留到下一页。

    另一个想法:如果所有感兴趣的页面都在同一个域和您的域中,则可能有一个父框架定期监视子框架并在每次文档更改时不断重置其上的事件处理程序.但是,由于同源策略安全限制,这只有在所有帧都在同一个域上时才有效。

    【讨论】:

      【解决方案2】:

      如果您针对的是当前浏览器并且不关心旧版支持,请查看 History API,因为它允许您向用户显示正在访问新页面(地址栏中的 URL 更改并返回/fwd 似乎可以正常工作)而无需刷新您的 JavaScript 上下文。

      在此处查看演示:http://html5demos.com/history

      并在此处阅读更多信息:https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history

      【讨论】:

      • 我主要针对 iOS Safari 5.1 浏览器,所以我确实不介意遗留问题。但是,历史记录无法解决我遇到的问题,检测 window.document 是否已更新。
      • 历史 API 会让您覆盖文档“更新”。否则,我想你可以监听"beforeunload" 事件,但这并不重要,因为你的脚本和所有 JS 对象都会在它发生后立即被擦除......
      • 确实是 JKing 现在你在说话。当文档确实被擦除时,'unload' 事件确实会被触发,但我实际上想要 'rightafterunload' ;-) 事件
      猜你喜欢
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多