Chrome 更新位置标头不影响重定向

kfgdxczn  于 11个月前  发布在  Go
关注(0)|答案(1)|浏览(136)

我正在尝试更新位置标头。我可以在控制台中看到标头的新值,但浏览器没有重定向到新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头值?

hmmo2u0o

hmmo2u0o1#

您需要为此使用webRequestBlocking权限(以及addbox中随附的'blocking'模式),但仅允许在策略安装的ManifestV 3扩展(或修补/重新编译的Chrome二进制文件)中使用,否则webRequest API纯粹是观察性的,即它无法进行更改。
在修复crbug.com/1141166之前,没有针对普通ManifestV 3扩展的解决方案,然后您将能够使用declarativeNetRequest API来更改已经拥有它的响应头。
当前的解决方法是对您确认提供此头的域无条件地使用declarativeNetRequest。要在一个规则中列出域,您可以使用requestDomains数组,或者完全忽略condition,以防列表与manifest.json中的host_permissions相同。

相关问题