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

Manifest V3下Chrome扩展Declarative Net Request规则失效及测试咨询

先修正你的规则错误(这是未生效的核心原因)

你的rules.json存在几个关键问题:

  1. 条件匹配错误:regexFilter是用来匹配请求URL的,不是响应头。要针对响应头Content-Security-Policy进行匹配,应该使用responseHeaderFilter字段。
  2. 目标Header名称错误:你要修改的是响应头Content-Security-Policy,而不是script-src——script-src是CSP头里的一个指令,不是独立的响应头。
  3. 动作参数错误:直接set整个script-src作为header是无效的,需要针对Content-Security-Policy头进行修改,比如用append操作添加新的源,或者用modify替换现有指令。

修正后的示例规则(以添加localhost:7000到script-src为例):

[
  {
    "id": 1,
    "priority": 1,
    "action": {
      "type": "modifyHeaders",
      "responseHeaders": [
        {
          "header": "Content-Security-Policy",
          "operation": "append",
          "value": " script-src https://localhost:7000;"
        }
      ]
    },
    "condition": {
      "responseHeaderFilter": ["content-security-policy"],
      "resourceTypes": ["main_frame"]
    }
  }
]

测试响应头是否被修改的方法

  • Chrome开发者工具网络面板

    1. 打开目标页面,按下F12打开开发者工具,切换到「网络」标签。
    2. 刷新页面,找到类型为document的主请求(对应main_frame资源类型)。
    3. 点击该请求,在右侧「响应头」区域查找Content-Security-Policy,查看是否包含你添加的https://localhost:7000。
  • 查看规则匹配状态

    1. 确保你的扩展已开启declarativeNetRequestFeedback权限(你已经在manifest里添加了)。
    2. 打开chrome://extensions/,开启开发者模式,找到你的扩展,点击「检查视图」打开Service Worker的控制台。
    3. 在控制台输入chrome.declarativeNetRequest.getMatchedRules()并执行,查看返回结果里是否有你的规则ID(1),如果有则说明规则已匹配;如果没有,检查规则的条件是否符合请求。
    4. 也可以打开chrome://net-internals/#events,在搜索框输入declarative_net_request,查看相关事件日志,确认规则是否被正确应用。
  • 验证CSP实际生效情况
    在目标页面的控制台中,尝试加载https://localhost:7000下的脚本,比如:

    const script = document.createElement('script');
    script.src = 'https://localhost:7000/test.js';
    document.body.appendChild(script);
    

    然后查看开发者工具的「控制台」是否有CSP报错,如果没有报错且脚本加载成功,说明CSP修改生效。

内容的提问来源于stack exchange,提问作者Yash Falke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:10:34