如何使用chrome / firefox扩展来阻止添加到DOM的新节点?

时间:2014-10-23 11:35:18

标签: javascript javascript-events google-chrome-extension firefox-addon mutation-observers

我正在编写一个扩展来检测某些脚本的某些恶意行为。这些脚本在加载页面后将一些节点添加到DOM中。我能够使用

获取这些节点
document.addEventListener("DOMNodeInserted", checkContents, false);

但是如何阻止它们被加载?这可以在chrome或firefox中完成吗?

1 个答案:

答案 0 :(得分:2)

将MutationObserver与childList和子树一起使用。

var grid = iframe.contentDocument.getElementById('newtab-grid');
var mobs = new iframe.contentWindow.MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
        console.log(mutation.type, mutation);
        if (mutation.addedNodes && mutation.addedNodes.length > 0) {
            var link = mutation.target.querySelector('.newtab-link');
            if (link) {
                link.setAttribute('target', '_parent');
                console.log('set target on this el')
            } else {
                console.log('this ell has no link BUT it was an added el')
            }
        }
    });
});
mobs.observe(grid, {
    childList: !0,
    subtree: !0
});

现在,这将告诉您何时添加节点,它会为您提供mutation.addedNodes中添加的内容。你可以通过迭代并删除添加的内容。我不确定你是否可以阻止它添加,但你可以在添加它之后删除它。

https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver?redirectlocale=en-US&redirectslug=DOM%2FMutationObserver#MutationObserverInit