Chrome Manifest V3 对 Adblock Plus 的影响:service worker 休眠与规则数量限制
Manifest V2 到 V3 的核心变化
2023 年起 Chrome 逐步停止支持 Manifest V2 扩展,2025 年 1 月 MV2 扩展彻底下线。Adblock Plus 不得不迁移到 MV3。
MV3 带来的两个关键约束直接影响拦截器:
约束一:Service Worker 替代后台脚本
- MV2 扩展的后台页面可以常驻;
- MV3 扩展只有一个 Service Worker,Chrome 会在空闲时把它休眠;
- Service Worker 休眠时,扩展无法响应某些实时事件。
对 ABP 的影响:
- 某些依赖"持续监听"的功能(比如 WebSocket 拦截)受影响;
- 拦截规则需要预先加载到静态声明式规则集里,不能完全动态生成。
约束二:declarativeNetRequest 规则数量上限
Chrome 对每个 MV3 扩展的静态规则数有硬上限:
- 30 万条规则(MV2 没有这个限制);
- 但其中只有 5 万条可以是"高优先级"规则。
EasyList 主列表已经有两万多条,EasyList China 加 EasyPrivacy 再加 Fanboy 系列,总量可能超过 30 万。这迫使 ABP 必须做规则压缩和动态合并——某些不常用的规则要移出静态声明式规则,改由扩展代码动态处理。
ABP 的 MV3 适配方案
Eyeo 采用了三层架构:
- 静态声明式规则:最常用、最高频的拦截规则(来自 EasyList 等),预加载到 Chrome 的 declarativeNetRequest API;
- 动态规则注入:Service Worker 运行时根据需要,临时把某些规则注入到 Chrome 的动态规则集里;
- 元素隐藏 CSS 注入:这部分一直走 content script,不受 MV3 约束。
这个方案让 ABP 在 MV3 下的拦截能力基本等价于 MV2,但有细微差异:
- 某些 MV2 能拦的 WebSocket 请求 MV3 拦不到;
- 某些规则的触发时机略晚(因为要等 Service Worker 被唤醒)。
和 uBlock Origin Lite 的对比
uBlock Origin 也拆成了两个版本:
- uBlock Origin Legacy:MV2 版本,仍在 Firefox 上使用;
- uBlock Origin Lite:MV3 版本,Chrome 商店里的那个。
两者的 MV3 适配方案类似,但:
- uBO Lite 对 Service Worker 休眠的应对更激进,用了更复杂的预唤醒机制;
- uBO Lite 额外用了"动态脚本替换"(把第三方广告脚本替换成本地空脚本 stub),这是 ABP 没有的能力;
- 实际拦截效果上,2026 年测试显示 uBO Lite 在 YouTube 插播广告上略胜一筹。
Firefox 的状况
Firefox 仍支持 MV2(没有强制迁移 V3),所以 Firefox 上的 ABP 仍能用完整的 MV2 能力。这也是为什么很多重度拦截器用户转向 Firefox 的原因之一。
用户层面要不要关心 MV3
不需要直接关心它的技术细节。你只需要知道:
- 如果拦截效果不如以前,先更新 ABP 到最新版(每次更新都在优化 MV3 适配);
- 换 Firefox 可以获得更完整的拦截能力;
- 自定义规则的语法不受 MV3 影响——你写的
||域名^@@##这些在 MV3 下一样能用。