You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改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"]);
解决方法

问题核心是缺少阻塞权限和监听选项,导致修改后的响应头无法被浏览器应用。

  1. 补充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"
    ]
}
  1. 添加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"]);
  1. 生效步骤
    修改完成后,在Chrome扩展管理页面重新加载该扩展,确保新配置生效。

内容的提问来源于stack exchange,提问作者David Klempfner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 06:23:27