如何在chrome扩展中静默取消webRequest

时间:2013-09-08 13:08:07

标签: javascript google-chrome google-chrome-extension

我在这里重新发布了Chromium-extensions google网上的问题。

在我的扩展程序中,我想基于url模式取消一些webRequests。我的问题是,如果我在 onBeforeRequest 事件侦听器中返回 {cancel:true} ,浏览器会重定向到一个页面,告诉我该请求被某些扩展程序阻止。但我只是想默默地取消请求(没有发生任何事情)。

我还尝试在 onBeforeRequest 事件侦听器中返回 {redirectUrl:“”} ,控制台会记录错误,指出“”不是有效的网址,浏览器底部出现一个栏,上面写着“等待扩展”。为了解雇该栏,我在该网页中运行内容脚本“ window.stop()”。这有时会起作用,但并非总是如此。所以我想知道是否有人有更好的解决方案。谢谢!

3 个答案:

答案 0 :(得分:15)

您应该使用“javascript:”url:

{
    redirectUrl:"javascript:"
}

答案 1 :(得分:6)

重定向到回复HTTP状态代码204的页面,例如, https://robwu.nl/204 这是我的网站,我不会将任何流量记录到此网址。

对于HTTP状态为204的响应,

The specification要求以下行为:

  

如果客户端是用户代理,则它不应该从导致请求发送的文档视图中更改其文档视图。此响应主要是为了允许在不导致更改用户代理的活动文档视图的情况下进行操作的输入,尽管任何新的或更新的元信息应该应用于当前在用户代理的活动视图中的文档。

这是一个简单的示例,一个无声地阻止对YouTube的所有请求的扩展程序:

chrome.webRequest.onBeforeRequest.addListener(function(details) {
    var scheme = /^https/.test(details.url) ? 'https' : 'http';
    return { redirectUrl: scheme + '://robwu.nl/204' };
}, {
    urls: ['*://www.youtube.com/*'] // Example: Block all requests to YouTube
}, ['blocking']);

此示例根据请求的方案重定向到http://robwu.nl/204https://robwu.nl/204,以避免混合内容警告。

要使此示例正常工作,您需要在清单文件中声明该站点的webRequest,webRequestBlocking和主机权限。

答案 2 :(得分:3)

return {redirectUrl: 'javascript:void(0)'};