Chrome 正在将webRequest迁移到声明性NetRequest

6mw9ycah  于 2023-02-06  发布在  Go
关注(0)|答案(1)|浏览(561)

嗨,我在清单V2中使用webRequest时,开始出现以下错误

'webRequestBlocking' requires manifest version of 2 or lower.

因此,我尝试将下面的现有代码转换为declarativenetrequest

var responseListener = function (details) {
  var rule = {
    name: "Access-Control-Allow-Origin",
    value: "*",
  };
  details.responseHeaders.push(rule);
  var rule1 = {
    name: "Access-Control-Allow-Methods",
    value: "GET, PUT, POST, DELETE, HEAD, OPTIONS",
  };
  details.responseHeaders.push(rule1);
  return { responseHeaders: details.responseHeaders };
};

chrome.webRequest.onHeadersReceived.addListener(
  responseListener,
  {
    urls: [
      "https://example.com/*",
      "*://*.example1.com?test",
    ],
  },
  // extraInfoSpec
  ["blocking", "responseHeaders", "extraHeaders"]
);

所以我试着将其替换为chrome.declarativeNetRequest.onHeadersReceived.addListener(
我得到了未捕获的TypeError:无法读取undefined的属性(阅读“addListener”)。有人能告诉我如何将当前函数迁移到declarativeNetRequest吗?

2admgd59

2admgd591#

您看到的错误是因为declarativeNetRequest提供了与webRequest不同的API,并且需要执行一些额外的迁移步骤。您可以在此处了解有关API的更多信息:https://developer.chrome.com/docs/extensions/reference/declarativeNetRequest/
对于您的用例,您实际上可以在清单中声明性地设置规则,而根本不需要调用任何API!这是新API的总体优势之一,它尝试向声明性规则移动,而不是向扩展授予对动态Web请求的访问权限。
首先,将以下内容添加到扩展清单:

Copyright 2023 Google LLC.
SPDX-License-Identifier: Apache-2.0

"declarative_net_request" : {
  "rule_resources" : [{
    "id": "ruleset_1",
    "enabled": true,
    "path": "rules_1.json"
  }]
},
"permissions": [
  "declarativeNetRequest"
],
"host_permissions": [
  "https://example.com/*"
]

这定义了一个新的“规则集”,还添加了所需的API和主机权限。
然后,您可以创建文件rules_1.json,并将所需的规则放入其中:

Copyright 2023 Google LLC.
SPDX-License-Identifier: Apache-2.0

[
  {
    "id" : 1,
    "priority": 1,
    "action": {
      "type": "modifyHeaders",
      "responseHeaders": [
        { "header": "Access-Control-Allow-Origin", "operation": "set", "value": "*" },
        { "header": "Access-Control-Allow-Methods", "operation": "set", "value": "GET, PUT, POST, DELETE, HEAD, OPTIONS" }
      ]
    },
    "condition" : {
      "urlFilter": "||example.com"
    }
  }
]

这将根据需要添加两个头文件。然后您可以重新加载您的扩展,应该可以开始了!
注意,你不会在开发工具中看到这些头文件。这是一个bug,希望将来能修复:https://bugs.chromium.org/p/chromium/issues/detail?id=1247400
如果你想检查它是否工作,进入https://example.com并在控制台中运行以下命令,将输出一个头文件列表,包括扩展添加的头文件:[...(await fetch("https://example.com")).headers] .

相关问题