webRequest API 观察页面发出的每一个请求。在 Manifest V3 中这些监听器是观察性的:你可以记录、测量和分析流量,但不能用 JavaScript 改写它。
MV3 允许什么
常规安装的 Chrome 在 Manifest V3 中无法使用
webRequestBlocking。如果你的目标是拦截或改写流量,请改为声明规则。见构建一个广告拦截器。
Manifest
webRequest 事件只对你的扩展能访问的 host 触发,所以要把这个权限和 host 权限搭配使用。
manifest.json
在后台观察请求
在后台脚本的顶层注册监听器,让 service worker 在每次唤醒时都重新注册它们。background.js
details 对象携带请求 id、标签页 id、方法、URL、资源类型和时间信息。通过 details.requestId 关联事件,可以构建出完整的请求时间线。
在 devtools 面板中检查请求
如果需要连响应体一起检查请求,devtools 面板是更好的界面。chrome.devtools.network API 以 HAR 条目的形式暴露已完成的请求,而且它不需要 webRequest 权限。
devtools_page 负责注册面板:
devtools/scripts.js
panel/scripts.js
chrome.devtools.network.getHAR 读取面板附加之前已加载的内容。
运行
Firefox 的差异
- Firefox 的 Manifest V3 仍然支持带
webRequestBlocking权限的阻塞式webRequest。 - Firefox 把 Manifest V3 的 host 权限当作可选授权。用户从扩展面板授予它们,而不是在安装时。
- Firefox 的后台以事件页运行,而不是 service worker。顶层注册监听器在两者上都可行。
- 上面的 devtools API 在 Firefox 中以相同的
chrome.devtools.*名称可用。
从模板开始
devtools 模板自带一个可用的 devtools_page 和面板接线。
最佳实践
- 在生产中收窄每个监听器的
urls过滤器,而不是监听<all_urls>。 - 通过
requestId而不是 URL 关联事件,因为页面会重复请求同一 URL。 - 保持监听器足够快,因为每个被观察的请求都会调用它们。
- 只申请你的功能所需的最窄 host 权限。
- 拦截用
declarativeNetRequest,观察才用webRequest。
下一步
- 在构建一个广告拦截器中以声明式拦截流量。
- 在安全检查清单中回顾 host 权限卫生。
- 回顾 Manifest V3 概念了解 service worker 的生命周期。

