我正在尝试更新位置标题。我可以在控制台中看到标头的新值,但是浏览器没有重定向到新 URL。
这是我的manifest.json:
{
"manifest_version": 3,
"name": "Hello Extensions",
"description": "Base Level Extension",
"version": "1.0",
"action": {
"default_popup": "hello.html",
"default_icon": "hello_extensions.png"
},
"background": {
"service_worker": "scripts/background.js"
},
"host_permissions": [
"<all_urls>"
],
"permissions": [
"webRequest"
]
}
背景.js:
var callback = function(details) {
if (details.statusCode === 302) {
var locationHeader = details.responseHeaders.find(x => x.name === 'Location')
if (locationHeader) {
locationHeader.value = "https://www.google.com";
console.log(details);
}
}
return { responseHeaders: details.responseHeaders };
}
var filter = { urls: ["*://*/*"] };
chrome.webRequest.onHeadersReceived.addListener(callback, filter, ["responseHeaders"]);
在这里您可以看到位置的新值:
我还查看了选项卡自己的控制台,可以看到位置值尚未保留。
如何使浏览器重定向到新的 Location 标头值?
您需要为此使用
webRequestBlocking
权限(以及 addListener 中附带的 'blocking'
模式),但仅在策略安装的 ManifestV3 扩展(或修补/重新编译的 Chrome 二进制文件中)允许使用,否则 webRequest
API纯粹是观察性的,即它无法做出改变。
在 crbug.com/1141166 修复之前,没有针对正常 ManifestV3 扩展的解决方案,然后您将能够使用 declarativeNetRequest API 更改已有响应的标头。
当前的解决方法是对您确认提供此标头的域无条件使用 declarativeNetRequest。要列出一条规则中的域,您可以使用
requestDomains
数组,或者完全省略 condition
,以防列表与 manifest.json 中的 host_permissions
相同。