DOMNodeInserted或hashchange

时间:2010-12-26 21:43:19

标签: javascript facebook hashchange mutation-events

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

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

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

2 个答案:

答案 0 :(得分:1)

对于轻量级页面,它通常没有明显的效果。然而,在笨重的页面上(我在gmail上试过这个),这让我真的很慢,甚至无法顺利撰写邮件。并且该事件被添加到一个非常简单的span元素中,该元素只有一个链接。 DOMNodeInserted和DOMSubTreeModified等事件都是真正的show stoppers。

更新:对于所有试图找到答案的人,请注意这些方法DOMNodeInserted(或DOMSubtreeModified)确实存在性能问题,因此根据新的ECMA规范,它是一个更快的监听器:MutationObserver用于执行相同的操作(和更多)。

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

答案 1 :(得分:1)

您可能想监视windows.history对象,请参阅以下答案,了解facebook如何使用它来更新页面: "Redirect" page without refresh (Facebook photos style)

相关问题