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

React开发Chrome扩展Manifest V3拦截URL报错求助

解决Chrome扩展Manifest V3下webRequest拦截URL的错误问题

错误原因分析

  • Manifest V3已完全移除webRequestBlocking权限和webRequest API的blocking监听模式,这是第一个错误的直接原因。
  • 第二个权限错误是因为V3不兼容旧的blocking监听逻辑,即使声明webRequestBlocking权限也无效。

解决方案

1. 更新manifest.json配置

移除webRequestBlocking权限,添加declarativeNetRequest权限(V3标准的网络拦截权限),同时配置规则资源路径:

{
  "manifest_version": 3,
  "name": "Chrome Extension",
  "description": "First Extension",
  "options_page": "options.html",
  "background": {
    "service_worker": "background.bundle.js"
  },
  "action": {
    "default_title": "Open Extension",
    "default_icon": "icon-34.png"
  },
  "icons": {
    "128": "icon-128.png"
  },
  "content_scripts": [
    {
      "matches": [
        "http://*/*",
        "https://*/*",
        "<all_urls>"
      ],
      "js": [
        "contentScript.bundle.js"
      ],
      "css": [
        "content.styles.css"
      ]
    }
  ],
  "devtools_page": "devtools.html",
  "web_accessible_resources": [
    {
      "resources": [
        "content.styles.css",
        "icon-128.png",
        "icon-34.png"
      ],
      "matches": ["<all_urls>"]
    }
  ],
  "permissions": [
    "activeTab",
    "tabs",
    "declarativeNetRequest"
  ],
  "host_permissions": [
    "<all_urls>"
  ],
  "declarative_net_request": {
    "rule_resources": [
      {
        "id": "ruleset_1",
        "enabled": true,
        "path": "rules.json"
      }
    ]
  }
}

2. 创建规则文件rules.json

在扩展根目录新建rules.json,定义具体的拦截规则(对应你原来的取消请求逻辑):

[
  {
    "id": 1,
    "priority": 1,
    "action": {
      "type": "cancel"
    },
    "condition": {
      "urlFilter": "https://reactjs.org/*",
      "resourceTypes": ["main_frame", "sub_frame", "script", "image"]
    }
  }
]

3. 调整background.js(可选)

如果不需要动态修改拦截规则,原有的webRequest监听代码可以直接删除;如果需要动态添加/删除规则,可使用declarativeNetRequest的动态规则API:

// 示例:扩展安装时动态添加拦截规则
chrome.runtime.onInstalled.addListener(() => {
  chrome.declarativeNetRequest.updateDynamicRules({
    addRules: [
      {
        "id": 2,
        "priority": 2,
        "action": { "type": "cancel" },
        "condition": { "urlFilter": "https://reactjs.org/*", "resourceTypes": ["main_frame"] }
      }
    ],
    removeRuleIds: []
  });
});

关键说明

  • Manifest V3强制使用declarativeNetRequest处理阻塞式网络拦截,它比旧的webRequestBlocking性能更高,且符合V3的安全规范。
  • host_permissions必须包含你要拦截的URL范围,否则规则不会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:25:28