变异观察器 - 回调函数改变DOM

5

有没有一种方法,可以强制突变观察器忽略回调函数引起的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);

看起来它可以工作,但是由于事件的异步处理,我担心可能会禁用观察者,从而错过其他更改。

很不可能有一种方法将页面本身的更改与回调分开,但我会尝试一下。

1个回答

5

如果observer只观察目标并且不进行其他操作,那么您的想法是可行的。但这并不是特别高效的解决方案,因为每次重新设置可观察对象时,您都必须再次设置钩子,但它确实可以正常工作。

observer.disconnect()
_3rd_party_callback();
observer.observe(target, config);

由于所有DOM更改都发生在主事件循环中,因此您不可能错过由_3rd_party_cb之外的任何内容引起的事件。因此,您需要断开观察者连接,调用第三方代码,然后重新连接观察者---这之间没有步骤可以更改DOM。但是,如果第三方代码通过例如setTimeout(messupthedom, 0)延迟更改,则仍然可以在可观察对象中捕获这些更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接