13

我在这里从 Chromium-extensions google 组重新发布我的问题。

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

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

4

3 回答 3

21

您应该改用“javascript:”网址:

{
    redirectUrl:"javascript:"
}
于 2013-09-08T13:37:48.910 回答
9
return {redirectUrl: 'javascript:void(0)'};
于 2014-12-19T10:42:49.283 回答
7

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

该规范要求 HTTP 状态为 204 的响应具有以下行为:

如果客户端是用户代理,它不应该改变导致请求被发送的文档视图。这个响应主要是为了允许输入动作发生而不改变用户代理的活动文档视图,尽管任何新的或更新的元信息应该应用于当前在用户代理的活动视图中的文档。

下面是一个简单的例子,一个静默阻止所有对 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 和主机权限。

于 2013-09-08T13:19:04.040 回答