我当前正在从迁移我的扩展
清单v2
到
清单v3
其用于修改来自HTTP请求的报头。
所以我使用
declarativeNetRequest.updateDynamicRules
来自chromeapi,它允许设置我的扩展的规则。
这是我阅读以实现的文档
declarativeNetRequest.updateDynamicRules
:
https://developer.chrome.com/docs/extensions/reference/declarativeNetRequest/
不幸的是,它对firefox浏览器没有影响,但在使用相同代码的chrome浏览器上运行得非常好。
这是我的manifest.json(v3):
{
"manifest_version": 3,
"name": "modify-header",
"short_name": "modify-header",
"version": "1.0.0",
"icons": {
"38": "assets/icons/icon-off.png"
},
"description": "Modify HTTP request ",
"permissions": [
"webRequest",
"storage",
"declarativeNetRequest",
"declarativeNetRequestWithHostAccess",
"tabs",
"cookies"
],
"host_permissions": [
"<all_urls>"
],
"action": {
"default_popup": "index.html?#/popup",
"default_title": "Modify Headers",
"default_icon": "assets/icons/icon-off.png"
},
"options_page": "index.html?#/configuration", // For chrome
"background": {
"service_worker": "serviceWorker.js" // For chrome
"scripts" : ["serviceWorker.js"] // For firefox
}
}
以下是在我的serviceWorker.js中运行的代码:
chrome.declarativeNetRequest.updateDynamicRules(
{
addRules: [{
"id": 1,
"priority": 1,
"action": {
"type": "modifyHeaders" as any,
"requestHeaders": [
{ "header": "h2", "operation": "set", "value": "v2" },
{ "header": "h3", "operation": "set", "value": "v3" }
] as any
},
"condition": {
"urlFilter": "*",
"resourceTypes": ["main_frame"] as any
}
}],
removeRuleIds: [1]
},
).then(() => {
console.log('Rule has been added !');
}).catch((error) => {
console.log('error:', error);
});
以下是检查网络时chrome的结果:
以下是firefox在检查网络时的结果:
正如您在chrome上看到的那样,标题已经正确添加,但在firefox上没有添加任何内容。
我还尝试使用firefox的“浏览器api”,如下所示:
browser.declarativeNetRequest.updateDynamicRules(
{
addRules: [{
"id": 1,
"priority": 1,
"action": {
"type": "modifyHeaders" as any,
"requestHeaders": [
{ "header": "h2", "operation": "set", "value": "v2" },
{ "header": "h3", "operation": "set", "value": "v3" }
] as any
},
"condition": {
"urlFilter": "*",
"resourceTypes": ["main_frame"] as any
}
}],
removeRuleIds: [1]
},
).then(() => {
console.log('Rule has been added browser !');
}).catch((error) => {
console.log('error:', error);
});
但在这种情况下,它不会改变任何事情。
这是我的设置:
显示
版本3
铬:
版本113
firefox:
版本114
firefox开发版:
版本115
附言
我在网上读到,也许firefox上的网络控制台没有显示修改后的标题。因此,标题已经更改,但只是没有显示。但在我的情况下,这是不正确的,因为我的扩展的行为会根据标头而改变。
动作“块”效果完美