4

我正在尝试编写一个“覆盖”在 Facebook 页面顶部的 JavaScript 脚本。它使用 DOMContentLoaded 来检测何时加载内容,然后添加一些额外的内容。但是,由于 Facebook 在转到新页面时实际上并没有“重新加载”页面(它只是使用 AJAX),所以 DOMContentLoaded 处理程序不会运行再次,即使有新的东西要浏览。

无论如何,为了检测更改,我考虑使用 onhashchange 因为 Facebook 曾经更改页面的哈希值,但是在 Firefox 4 中(我需要支持 Firefox 3 及更高版本,但没有其他浏览器),Facebook 不会更改哈希值不再,在 Firefox 3.6 之前的版本中没有 onhashchange。

我考虑过使用 DOMNodeInserted,但这真的会减慢页面速度吗?(我真的不能在这个脚本中放慢速度。)

4

2 回答 2

1

您可能想要监视 windows.history 对象,请参阅以下答案,了解 facebook 如何使用它来更新页面: “重定向”页面而不刷新(Facebook 照片样式)

于 2011-01-22T05:50:29.060 回答
1

对于轻量级页面,它通常没有明显的效果。但是,在庞大的页面上(我在 gmail 上尝试过),这真的很慢,我什至无法顺利地撰写消息。该事件被添加到一个非常简单的 span 元素中,其中只有一个链接。像 DOMNodeInserted 和 DOMSubTreeModified 这样的事件是真正的阻碍。

更新:对于所有试图找到答案的人,请注意这些方法 DOMNodeInserted(或 DOMSubtreeModified)确实存在性能问题,因此根据新的 ECMA 规范,它是一个更快的侦听器:MutationObserver 用于做同样的事情(以及更多) .

https://hacks.mozilla.org/2012/05/dom-mutationobserver-reacting-to-dom-changes-without-killing-browser-performance/

于 2010-12-29T23:03:27.920 回答