如何在谷歌Chrome扩展中拦截URL以特定字符开头的请求?
解决方案
1. 先确认manifest.json权限配置
Chrome扩展请求拦截能力需要提前在配置文件中声明对应权限,分两个版本的配置要求:
- Manifest V2 配置:
"permissions": [ "webRequest", "webRequestBlocking", "*://*.facebook.com/s/*" ], "background": { "scripts": ["background.js"] }
- Manifest V3 配置:
Manifest V3 中webRequest的blocking能力仅对企业政策部署的扩展开放,普通公开扩展需使用declarativeNetRequest实现拦截,性能更高且无需后台脚本常驻:
"permissions": [ "declarativeNetRequest" ], "host_permissions": [ "*://*.facebook.com/s/*" ], "background": { "service_worker": "background.js" }
2. 对应后台代码调整
Manifest V2 + webRequest 方案
你原有代码可优化匹配规则,减少不必要的全局请求监听:
chrome.webRequest.onBeforeSendHeaders.addListener( function(details) { console.log(details); return { cancel: true }; }, // 直接在监听规则里限定目标路径,无需判断所有请求 { urls: ["*://*.facebook.com/s/*"] }, ["blocking", "requestHeaders"] );
Manifest V3 推荐方案
直接在background.js中注册拦截规则即可:
chrome.runtime.onInstalled.addListener(() => { chrome.declarativeNetRequest.updateDynamicRules({ addRules: [ { id: 1, priority: 1, action: { type: "block" }, condition: { urlFilter: "*://*.facebook.com/s/*", resourceTypes: ["main_frame", "sub_frame", "xmlhttprequest", "script", "image", "stylesheet"] } } ], removeRuleIds: [1] }); });
常见排查点
- 规则不生效时,先到扩展管理页面确认你的扩展已开启对应场景权限,比如「允许访问文件网址」「在隐身模式下启用」
- 上述配置中的通配符可同时匹配带www、不带www的Facebook域名下所有/s/开头的请求,覆盖所有常见资源类型
内容的提问来源于stack exchange,提问作者user15881569
相关产品推荐
相关产品推荐

