Chrome扩展Manifest V3中declarativeNetRequest如何保留查询参数
Chrome 扩展 Manifest V3 declarativeNetRequest 重定向保留查询参数解决方案
问题原因
你当前配置的是固定目标URL的重定向规则,这类规则会直接用配置的地址完整替换原请求URL,不会自动保留原请求携带的查询参数,因此带参数的请求会被跳转到无参数的目标地址。
可行实现方案
最简便的方式是使用正则匹配替换规则,无需额外编写运行时代码,静态规则即可直接实现需求,修改后的规则参考如下:
[ { "id": 1, "action": { "type": "redirect", "redirect": { "regexSubstitution": "https://another.com/api_2/luckyDog\\1" } }, "condition": { "requestMethods": ["get"], "regexFilter": "^https?://current\\.com/api/luckyDog(\\?.*)?$", "resourceTypes": ["xmlhttprequest", "fetch"] } } ]
规则说明
- 替换原有的
urlFilter为regexFilter,通过正则匹配原请求地址,将查询参数部分(?开头的所有内容,包含无查询参数的空场景)捕获为第1个分组 regexSubstitution中通过\\1引用捕获到的查询参数分组,自动拼接到目标地址末尾:无查询参数时分组内容为空,重定向结果和你原有逻辑一致;带查询参数时会自动携带原参数,完全符合预期- 新增
resourceTypes字段限定匹配的请求类型(可根据你的实际业务场景调整取值,比如需要匹配页面导航就加main_frame),避免规则误匹配其他类型资源请求
配套权限配置
确保manifest.json中已声明对应权限,否则规则不会生效:
{ "permissions": ["declarativeNetRequest"], "host_permissions": ["*://current.com/*", "*://another.com/*"] }
注意:修改规则后需要重新加载扩展,可访问
chrome://extensions/确认扩展权限已正常授予,规则加载无报错。
内容的提问来源于stack exchange,提问作者Yue
相关产品推荐
相关产品推荐

