检测,更改或删除现有的变异观察者

use*_*877 5 security mutation-observers

如果某个JS添加了一个突变观察者,其他JS是否有可能检测,删除,替换或更改该观察者?我担心的是,如果某个JS旨在破坏某个DOM元素而不被发现,那么JS可能希望摆脱观察该DOM元素的所有观察者。

小智 3

我不确定是否已安装观察者,但可以通过使用空函数重新观察感兴趣的节点来有效删除它们。如果存在的话,重新观察节点将替换以前的观察者功能。

var observerRef = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;

// Empty function here to replace whatever might have been installed on targets
var observer = new observerRef( function (mutations) { } );

// Could also be id=someid, etc
var targets = document.querySelectorAll('[class=someclassname]'); 

// Update/replace the observers on all the targets
for(var i = 0; i < targets.length; ++i) {
    observer.observe(targets[i], { attributes: true, childList: true, characterData: false } );
}
Run Code Online (Sandbox Code Playgroud)

  • 这并没有真正清除从其他脚本应用的现有 MutationObservers。 (2认同)