0

我正在尝试制作一个简单的 Chrome 插件来从域 x 中删除每个事件。我调查了它并发现了“beforeload”事件监听器,这显然是 adblock 用来完全阻止广告加载的东西。我已经在插件中实现了这一点,并添加了诸如 console.log("addon loaded") 之类的东西,以确保它实际上正在加载 javascript,但问题是,它只捕获了少数事件,例如在50 个事件,它可能只捕获 1-2 个。它错过了明显的其他事情。

抽搐.js

document.addEventListener("beforeload", function(event) {
    event.preventDefault();
    $(event.target).remove();
}, true);

清单.json

...
"content_scripts": [ {
    "js": [ "js/jquery.js", "js/twitch.js" ],
    "css": [ "css/twitch.css"],
    "matches": ["*://*/*"], 
    "run_at": "document_start",
    "all_frames" : true
}],
...

有没有人有任何想法?

4

1 回答 1

5

beforeload为页面上的每个脚本、iframe、图像和样式表调用一次,而不是为每个事件调用一次(你是说元素吗?)。您是否期待其他元素引发此事件?

这份名为Blocking Unwanted Content的文档提到了一个要求:

要阻止内容,您的脚本必须作为启动脚本运行,以便在显示内容之前执行。

所以检查一下。此外,您不需要该.remove()行,只需调用event.preventDefault()将停止创建资源。

document.addEventListener( 'beforeload', function( event ) {
    event.preventDefault();
}, true );
于 2012-07-08T23:50:36.537 回答