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

Chrome扩展开发:如何通过declarativeNetRequest允许已拦截URL

解决Chrome扩展修改拦截规则动作的问题

Chrome的declarativeNetRequest静态规则确实没法直接修改参数(比如把block改成allow),只能通过以下两种方式实现需求:

方法一:使用动态规则替代静态规则

静态规则是从扩展包内的文件加载的,属于只读配置,没法修改动作类型。你可以完全改用动态规则来实现初始拦截、后续放行的逻辑:

  1. 初始添加拦截规则
    在扩展启动时,通过API添加动态拦截规则:

    // 初始化拦截example.com
    chrome.declarativeNetRequest.updateDynamicRules({
      addRules: [{
        id: 1,
        priority: 1,
        action: { type: "block" },
        condition: { urlFilter: "example.com", resourceTypes: ["main_frame"] }
      }]
    });
    
  2. 满足条件时放行
    当触发允许访问的条件时,要么直接删除拦截规则,要么添加优先级更高的允许规则覆盖它:

    • 删除拦截规则:
      chrome.declarativeNetRequest.updateDynamicRules({
        removeRuleIds: [1]
      });
      
    • 添加允许规则(优先级更高,会覆盖拦截规则):
      chrome.declarativeNetRequest.updateDynamicRules({
        addRules: [{
          id: 2,
          priority: 2, // 优先级必须高于拦截规则
          action: { type: "allow" },
          condition: { urlFilter: "example.com", resourceTypes: ["main_frame"] }
        }]
      });
      

方法二:切换规则集

如果你想保留静态规则的形式,可以定义两套规则集,初始启用拦截规则集,满足条件时切换到允许规则集:

  1. 在manifest中配置双规则集

    "declarative_net_request": {
      "rule_resources": [
        {
          "id": "block_rules",
          "enabled": true, // 初始启用拦截规则
          "path": "rules/block.json"
        },
        {
          "id": "allow_rules",
          "enabled": false, // 初始禁用允许规则
          "path": "rules/allow.json"
        }
      ]
    }
    

    其中block.json里是拦截example.com的规则,allow.json里是允许访问的规则(或者空规则,只要禁用拦截规则集即可)。

  2. 切换规则集状态
    当满足条件时,通过API切换规则集的启用状态:

    chrome.declarativeNetRequest.updateEnabledRulesets({
      enableRulesetIds: ["allow_rules"],
      disableRulesetIds: ["block_rules"]
    });
    

关键说明

静态规则的设计就是只读的,只能通过enabled字段控制启用/禁用,没法修改规则的action等参数。所以必须用动态规则或规则集切换的方式来实现“从拦截到允许”的逻辑切换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:05:07