[英]Mutation observer - DOM is changed by callback function
有沒有一種方法,如何迫使變異觀察者忽略回調函數引起的DOM變化?
現在我有:
var config = { attributes: true, childList: true, characterData: true };
var target = document.body;
var timer;
// create an observer instance
var observer = new MutationObserver(function(mutations) {
// fired when a mutation occurs
timer = setTimeout(function () {
_3rd_party_callback();
}, 500);
});
observer.observe(target, config);
問題是, _3rd_party_callback
回調導致DOM更改,因此它永遠不會停止。 顧名思義,它是第三方功能,我無法更改(實際上,它的DOM操作是其目的)。
所以我要做的是分別在回調函數調用之前和之后斷開並啟動觀察器。
observer.disconnect()
_3rd_party_callback();
observer.observe(target, config);
似乎可行,但是恐怕由於事件的異步處理,當進行其他更改並錯過它們時,我可能禁用了觀察者。
很難將頁面本身和回調中的更改分開,但是我將嘗試一下。
如果observer
只observe
目標observe
其他東西,那么您的想法將起作用。 這不是一個特別有效的解決方案,因為每次重置可觀察對象時,您都必須重新設置鈎子,但是它將起作用。
observer.disconnect()
_3rd_party_callback();
observer.observe(target, config);
由於主事件循環中發生了所有DOM更改,因此您有0個機會錯過由_3rd_party_cb
以外的任何內容引起的事件。 因此,您斷開了與觀察者的連接,調用了第三方代碼,然后重新連接它--- DOM之間沒有任何更改的步驟。 但是,如果第三方代碼通過setTimeout(messupthedom, 0)
推遲更改,您仍將在可觀察范圍內接受這些更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.