javascript - 如何使用 Chrome/Firefox 扩展阻止将新节点添加到 DOM?

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

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

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

但是我怎样才能阻止它们被加载呢?这可以在 Chrome 或 Firefox 中完成吗?

最佳答案

将 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

关于javascript - 如何使用 Chrome/Firefox 扩展阻止将新节点添加到 DOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26527153/

相关文章:

javascript - 在 Chrome 扩展程序中查看后台 HTML 页面

javascript - onMessage 事件永远不会被调用

javascript - FireFox AddOn SDK 关闭当前选项卡

javascript - Highcharts 错误 #16 : charts not showing on the same page

javascript - 删除文本时保留 DOM 元素位置

Javascript:以二进制形式读取远程文件

javascript - 未捕获的语法错误 : await is only valid in async function (its in an async function though. ...)

javascript - 在 div 悬停时,返回它的左属性

javascript - 如何更改父级的背景颜色?

javascript - 使用 Firefox 的 Downloads.jsm 在观察文件的同时一次下载一个文件?