我正在尝试更新位置标头。我可以在控制台中看到标头的新值,但浏览器没有重定向到新URL。
这是我的清单。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"
]
}
字符串
background.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头值?
1条答案
按热度按时间hmmo2u0o1#
您需要为此使用
webRequestBlocking
权限(以及addbox中随附的'blocking'
模式),但仅允许在策略安装的ManifestV 3扩展(或修补/重新编译的Chrome二进制文件)中使用,否则webRequest
API纯粹是观察性的,即它无法进行更改。在修复crbug.com/1141166之前,没有针对普通ManifestV 3扩展的解决方案,然后您将能够使用declarativeNetRequest API来更改已经拥有它的响应头。
当前的解决方法是对您确认提供此头的域无条件地使用declarativeNetRequest。要在一个规则中列出域,您可以使用
requestDomains
数组,或者完全忽略condition
,以防列表与manifest.json中的host_permissions
相同。