簡體   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