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

问题描述 投票:0回答:1

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

google-chrome google-chrome-extension browser-extension
1个回答
0
投票

您需要为此使用

webRequestBlocking
权限(以及 addListener 中附带的
'blocking'
模式),但仅在策略安装的 ManifestV3 扩展(或修补/重新编译的 Chrome 二进制文件中)允许使用,否则
webRequest
API纯粹是观察性的,即它无法做出改变。

crbug.com/1141166 修复之前,没有针对正常 ManifestV3 扩展的解决方案,然后您将能够使用 declarativeNetRequest API 更改已有响应的标头。

当前的解决方法是对您确认提供此标头的域无条件使用 declarativeNetRequest。要列出一条规则中的域,您可以使用

requestDomains
数组,或者完全省略
condition
,以防列表与 manifest.json 中的
host_permissions
相同。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.