突变观察者 - DOM 通过回调函数改变

2024-03-22

有没有办法,如何强制突变观察者忽略回调函数引起的 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目标,仅此而已。这不是一个特别有效的解决方案,因为每次重置可观察值时都必须再次设置挂钩,但它会起作用。

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

由于外部因素导致您错过活动的可能性为 0_3rd_party_cb由于所有 DOM 更改都发生在主事件循环中。因此,您断开观察者的连接,调用第 3 方代码,然后重新连接它——中间没有任何步骤可以更改 DOM。但是,如果第 3 方代码推迟更改,例如setTimeout(messupthedom, 0)你仍然会在你的 observable 中发现这些变化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

突变观察者 - DOM 通过回调函数改变 的相关文章

随机推荐