【问题标题】:Is there a way to remove all mutationObservers from the item without reference to it?有没有办法从项目中删除所有的mutationObservers而不参考它?
【发布时间】:2020-05-03 10:11:16
【问题描述】:

特别是我的一个 chrome 扩展在整个身体上添加了 MutationsObserver。有什么办法可以防止这种情况或在运行时从正文中删除所有观察者?

【问题讨论】:

  • 不,没有办法删除它,但您可以删除整个 document.body 元素并将其重新添加(以防扩展程序没有动态重新附加观察者)。
  • 还可以修补 MutationObserver.prototype.observe 并且如果从扩展程序调用它则不会执行任何操作
  • 修补原型无济于事,因为扩展程序在孤立的世界中运行内容脚本。

标签: javascript ecmascript-6 browser mutation-observers


【解决方案1】:

MutationObservers 不附加到 DOM,所以如果你用它自己的副本替换 body,观察者将被断开连接(并被垃圾收集)。试试这个:

document.body = document.body.cloneNode(true);

【讨论】:

  • 哇,太棒了!
  • 请注意,代码添加的所有事件侦听器肯定也会丢失
  • 是的,我发现了这个问题,但我认为可以接受,谢谢:) 为了尽量减少影响,我们可以使用replaceChild(new_elm, old_elm)替换父节点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 2012-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多