修改302响应的Location头后浏览器未执行重定向的问题求助
问题描述
尝试修改302重定向响应的Location头,在扩展控制台能看到修改后的新值,但浏览器并未跳转到该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" ] }
原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"]);
解决方法
问题核心是缺少阻塞权限和监听选项,导致修改后的响应头无法被浏览器应用。
- 补充
webRequestBlocking权限
在manifest.json的permissions数组中添加"webRequestBlocking",这是Chrome扩展修改响应头的必要权限:
{ "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", "webRequestBlocking" ] }
- 添加
blocking监听选项
修改chrome.webRequest.onHeadersReceived.addListener的第三个参数,加入"blocking",让扩展能够拦截并修改响应:
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"; } } return { responseHeaders: details.responseHeaders }; } var filter = { urls: ["*://*/*"] }; chrome.webRequest.onHeadersReceived.addListener(callback, filter, ["responseHeaders", "blocking"]);
- 生效步骤
修改完成后,在Chrome扩展管理页面重新加载该扩展,确保新配置生效。
内容的提问来源于stack exchange,提问作者David Klempfner
相关产品推荐
相关产品推荐

