簡體   English   中英

突變觀察者-DOM由回調函數更改

[英]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);

似乎可行,但是恐怕由於事件的異步處理,當進行其他更改並錯過它們時,我可能禁用了觀察者。

很難將頁面本身和回調中的更改分開,但是我將嘗試一下。

如果observerobserve目標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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM