chrome.webRequest.onBeforeRequest.addListener无法读取属性'onBe

chrome.webRequest.onBeforeRequest.addListener Cannot read property 'onBeforeRequest' of undefined

本文关键字:属性 onBe 读取 webRequest onBeforeRequest addListener chrome      更新时间:2023-09-26

我正在尝试构建自己的chrome扩展,并尝试使用onBeforeRequest添加一个事件处理程序。

我的manifest.json:

{
    "manifest_version": 2,
    "name": "My extension",
    "description": "some descrpition",
    "version": "1.0",
    "permissions": [
        "activeTab",
        "tabs",
        "webRequest",
        "webNavigation",
        "management",
        "http://*/*",
        "https://*/*"
    ],
    "background": {
        "scripts": [
            "js/jquery-2.1.4.min.js",
            "js/background.js"
        ],
        "persistent": true
     },
    "browser_action": {
        "default_icon": "imgs/img.png",
        "default_title": "extension"
    },
    "icons" : {
      "64" : "imgs/vergrootglas.png"  
    }
}

我的background.js:

function callback(param1,param2,param3){
    alert(param1);
    alert(param2);
    alert(param3);
}
//alert("test");

chrome.webRequest.onBeforeRequest.addListener(callback);

我把这个装进我的铬合金里了。但每次我在控制台上收到这样的消息:

未捕获的TypeError:无法读取的属性"onBeforeRequest"未定义

我不知道我做错了什么,我发现了:https://developer.chrome.com/extensions/webRequest

但是代码的示例似乎与我所做的完全相同。我在这里错过了什么?

上面的评论对我来说没有意义。上面有一个后台脚本,它似乎有适当的权限。。。一些额外的评论可能会有所帮助。。。

您需要在清单文件中添加一个后台页面,并在清单中添加适当的权限,以便后台页面可以访问webRequest API。看到这个例子:chrome.webRequest不工作?

正如Mihai所提到的,如果您需要让内容脚本执行操作,请查看此页面:https://developer.chrome.com/extensions/messaging

将其添加到您的内容脚本中(您可以将问候更改为动作,并将背景脚本应执行的问候更改为哪个动作):

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

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

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"});
  });

我刚刚遇到了一个类似的问题,只是对我来说这个问题与权限无关,实际上是一个Webpack问题。

我的背景脚本意外地与内容脚本捆绑在一起。后台js正在导出内容脚本正在使用的某些常量,导致仅限于后台文件(如chrome.webRequest)的方法作为内容脚本的一部分被调用,因此undefined…的不可读取属性