Chrome扩展程序/ JavaScript如何使页面上的所有链接无效?

时间:2017-10-20 10:33:29

标签: javascript html google-chrome-extension

我只想阻止在点击链接时打开新页面(可能是img或按钮)。这是我的" content-scripts.js"中的代码:

document.onclick = function() {
    return false;
}

它可以工作,但有时它不起作用,我不知道为什么。当我点击网页上的某些元素时,它仍会打开另一个网址。

1 个答案:

答案 0 :(得分:0)

它并不总是有效,因为点击可能无法一直到document,它的冒泡可能会在它到达之前被取消。

要执行您正在执行的操作,您必须在页面上的每个元素上挂钩click,并列出DOM修改,以便您可以挂钩如果新元素已添加到页面中,则会click

要处理所有元素,您可以递归地遍历DOM树,也可以通过document.querySelectorAll("*")获取一个可能很大的列表。

要收听DOM修改,以便在添加新元素时将其挂钩,您需要mutation observer

由于其他JavaScript代码可能会覆盖您的onclick,我会改为使用addEventListener,并且都会停止传播并停止即时传播:

function stopEvent(e) {
    e.stopPropagation();
    e.stopImmediatePropagation();
    e.preventDefault();
}
someElement.addEventListener("click", stopEvent);

例如,粗略地说:

function stopEvent(e) {
    e.stopPropagation();
    e.stopImmediatePropagation();
    e.preventDefault();
}
document.querySelectorAll("*").forEach(function(element) {
    element.addEventListener("click", stopEvent);
});

...然后使用变异观察器来处理新添加的元素。