2012-04-11 78 views
0

window.document经常变得很安静,例如,当您从一个url移动到另一个或者当您调用document.reload(true);Javascript。如何检测window.document何时更改?

文档本身有一个完美的readyState和一个readystatechange事件来跟踪任何变化。但是,如果将addEventListener放置到readyState事件的文档中并重新获取文档,则addEventListener将不再存在,并且该方法将永远不会被调用。

所以我喜欢每次在窗口对象中更新文档。那么有没有办法来检测?

回答

3

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

有点根据定义,当加载新页面时,页面中的所有脚本都会被清除,所以不可能让页面中的脚本存活到下一页。

另外一个想法是:如果所有感兴趣的页面都在同一个域和域上,那么可能有一个父框架定期监视子框架,并在每次文档时不断重置事件处理器变化。但是,由于相同来源政策的安全限制,只有在所有框架位于同一个域上的情况下,此功能才有效。

0

如果您针对的是目前的浏览器并且不关心旧版支持,请查看历史记录API,因为它允许您向用户展示要进入新页面(地址栏中的网址更改以及回到/ fwd似乎按照他们的设想工作),而无需刷新JavaScript上下文。

在这里看到一个演示:http://html5demos.com/history

而且阅读更多关于它在这里:https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history

+0

我主要针对iOS的Safari浏览器5.1的浏览器,所以我不介意遗留确实如此。然而,历史不会解决我遇到的问题,检测window.document是否得到更新。 – Mark 2012-04-11 10:22:46

+0

历史api会让你_override_文件“更新”。否则,我想你可以听before'load事件,但它并不重要,因为你的脚本和所有的JS对象会在它发生之后立即被擦掉...... – JKing 2012-04-11 10:29:03

+0

确实JKing现在你在说话。 'unload'事件确实在文件被擦除时被触发,但我确实希望'rightafterunload';-)事件 – Mark 2012-04-11 14:31:30