繁体   English   中英

DOMNodeInserted或hashchange

[英]DOMNodeInserted or hashchange

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

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

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

对于轻量级页面,通常效果不明显。 但是,在笨重的页面上(我在gmail上尝试过此操作),这使我什至无法轻松撰写邮件的过程变得非常缓慢。 并将该事件添加到一个非常简单的span元素中,该元素中只有一个链接。 诸如DOMNodeInserted和DOMSubTreeModified之类的事件是真正的节目制止者。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM