CHROME WebRequest API示例错误:“onBeforeRequest”只能用于扩展进程

时间:2011-11-22 07:12:42

标签: google-chrome-extension webrequest

我尝试测试WebRequest APIs的示例,但抛出错误:

  

“onBeforeRequest”只能用于扩展进程。   的manifest.json:

{
    "name": "example",
   "version": "1.0",
  "permissions": [
    "experimental",
    "http://*/*", "https://*/*"
  ],
    "content_scripts": [ {
      "js": [ "foo.js" ],
      "matches": [ "http://*/*", "https://*/*" ],
      "run_at": "document_start"
   } ]
}

foo.js正是示例1

2 个答案:

答案 0 :(得分:10)

Chrome扩展程序功能(包括webRequest API)无法在内容脚本中使用(在您的示例中为foo.js)。如果您希望从内容脚本中使用webRequest,则可以使用messaging功能与扩展程序background page进行通信。后台页面可以直接使用webRequest,并将响应(如果有)中继回内容脚本。

答案 1 :(得分:1)

您需要在清单文件中添加后台页面以及清单中的相应权限,以便后台页面可以访问webRequest API。请参阅此示例:This

正如Mihai所说,如果您需要让内容脚本执行操作,请查看此页面:chrome.webRequest not working?

将此添加到您的内容脚本中(您可以将问候语更改为操作,并向后台脚本应执行的操作进行调用):

chrome.runtime.sendMessage({greeting: "hello"}, function(response) {
   console.log(response.farewell);
});

将此添加到您的后台页面(您可以执行if语句并根据消息执行不同的操作):

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    console.log(sender.tab ?
                "from a content script:" + sender.tab.url :
                "from the extension");
    if (request.greeting == "hello")
      sendResponse({farewell: "goodbye"});
  });