嗨,我在清单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吗?
1条答案
按热度按时间2admgd591#
您看到的错误是因为
declarativeNetRequest
提供了与webRequest
不同的API,并且需要执行一些额外的迁移步骤。您可以在此处了解有关API的更多信息:https://developer.chrome.com/docs/extensions/reference/declarativeNetRequest/对于您的用例,您实际上可以在清单中声明性地设置规则,而根本不需要调用任何API!这是新API的总体优势之一,它尝试向声明性规则移动,而不是向扩展授予对动态Web请求的访问权限。
首先,将以下内容添加到扩展清单:
这定义了一个新的“规则集”,还添加了所需的API和主机权限。
然后,您可以创建文件
rules_1.json
,并将所需的规则放入其中:这将根据需要添加两个头文件。然后您可以重新加载您的扩展,应该可以开始了!
注意,你不会在开发工具中看到这些头文件。这是一个bug,希望将来能修复:https://bugs.chromium.org/p/chromium/issues/detail?id=1247400
如果你想检查它是否工作,进入https://example.com并在控制台中运行以下命令,将输出一个头文件列表,包括扩展添加的头文件:
[...(await fetch("https://example.com")).headers]
.