【问题标题】:Chrome extension: how to intercept requested urls? [closed]Chrome 扩展:如何拦截请求的 url? [关闭]
【发布时间】:2015-06-02 07:54:54
【问题描述】:

如果某些条件匹配,扩展如何拦截任何请求的 URL 以阻止它? (similar question for Firefox)

manifest.json需要设置什么权限?

【问题讨论】:

  • 请在这个问题中包含足够的信息,以便在链接失效时可以回答。链接到相关问题很好,也值得鼓励,但是这个问题应该独立存在。
  • @intika 接受/改进了您的编辑,提名重新开放。

标签: google-chrome http google-chrome-extension chromium


【解决方案1】:

JavaScript 代码:

以下示例说明了如何阻止对 www.evil.com 的所有请求:

chrome.webRequest.onBeforeRequest.addListener(
  function(details) {
    return {cancel: details.url.indexOf("://www.evil.com/") != -1};
  },
  { urls: ["<all_urls>"] },
  ["blocking"]
);

以下示例以更有效的方式实现了相同的目标,因为不针对 www.evil.com 的请求不需要传递给扩展:

chrome.webRequest.onBeforeRequest.addListener(
  function(details) { 
    return { cancel: true }; 
  },
  {urls: ["*://www.evil.com/*"]},
  ["blocking"]
);

注册事件监听器:

要为 Web 请求注册事件侦听器,您可以使用常用 addListener() 函数的变体。除了指定回调函数之外,您还必须指定一个过滤器参数,并且您可以指定一个可选的额外信息参数。

Web 请求 API 的 addListener() 的三个参数具有以下定义:

var callback = function(details) {...};
var filter = {...};
var opt_extraInfoSpec = [...];

以下是监听 onBeforeRequest 事件的示例:

chrome.webRequest.onBeforeRequest.addListener(
  callback, filter, opt_extraInfoSpec);

ma​​nifest.json 需要权限:

"permissions": [
  "webRequest",
  "webRequestBlocking",
"tabs",
"<all_urls>"
],

扩展示例和帮助链接:

【讨论】:

  • 现在这是一个更好的答案。感谢您抽出宝贵时间来做这件事。
  • @intika 非常感谢您的回答。刚刚改进了格式。
  • 有没有办法将请求重定向到不同的 URL?