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

时间:2014-04-03 02:21:03

标签: security mutation-observers

如果某些JS添加了变异观察者,那么其他JS是否可以检测,删除,替换或更改该观察者?我担心的是,如果某些JS的目的是破坏某些DOM元素,而不会发现JS可能想要删除任何观察DOM元素的观察者。

1 个答案:

答案 0 :(得分: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 } );
}