Google Has Removed MV2 Extensions from the Chrome Web Store, Including UBO

来源:HackerNews

背景与概述

2024年10月,Chrome 网上应用商店正式下架了所有基于 Manifest V2(MV2)的扩展程序,其中就包括全球用户量超过千万的广告拦截神器 uBlock Origin(UBO)。这一消息在开发者社区和普通用户中引发了不小的震动——毕竟,UBO 长期以来被视为对抗恶意广告、保护隐私的“最后一道防线”,而 Chrome 的这一举动,意味着用户将无法再从官方渠道安装或更新 MV2 扩展。

其实,Google 早在 2020 年就公布了 Manifest V3(MV3)的迁移计划,并多次推迟 MV2 的淘汰时间。但这一次,官方不再“心软”,直接对商店内的 MV2 扩展执行了“物理删除”。对于尚未迁移到 MV3 的扩展开发者来说,这无异于“断粮”;对于依赖这些扩展的用户,尤其是技术爱好者,则意味着必须寻找替代方案,或者干脆换用 Firefox 等仍支持 MV2 的浏览器。

为什么 Google 如此执着于淘汰 MV2?表面上看是为了提升浏览器安全性和性能,但更深层的原因在于 MV3 对扩展权限的收紧,尤其是对远程代码执行和网络请求拦截能力的限制。这直接影响了广告拦截类扩展的生存空间,也让不少开发者质疑 Google 是否在“借安全之名,行垄断之实”。无论如何,MV2 时代已经正式落幕,我们有必要深入理解这场变革背后的技术逻辑与应对策略。

核心内容

1. MV2 与 MV3 的本质区别

MV2 允许扩展使用 webRequest API 进行阻塞式网络请求拦截,这意味着扩展可以在请求发出前直接修改或阻止它。UBO 正是利用这一机制,实现了高效的广告和追踪器过滤。而 MV3 用 declarativeNetRequest API 取代了 webRequest 的阻塞功能,开发者只能通过声明静态规则来过滤请求,且规则数量有上限(目前为 30,000 条),无法动态修改请求头或响应体。

// MV3 中的 declarativeNetRequest 规则示例
{
  "id": 1,
  "priority": 1,
  "action": { "type": "block" },
  "condition": {
    "urlFilter": "||ads.example.com^",
    "resourceTypes": ["script", "image"]
  }
}

这种设计虽然更安全(扩展无法随意篡改网络数据),但也极大限制了广告拦截的灵活性和效果。UBO 的开发者曾多次表示,MV3 的规则引擎无法满足复杂过滤需求,因此他们推出了独立的 uBlock Origin Lite(MV3 版本),但功能上打了折扣。

2. 下架对用户和开发者的影响

对于普通用户,最直接的影响是:已经安装的 MV2 扩展虽然暂时还能用,但一旦浏览器更新或扩展需要重新安装,就会彻底失效。对于开发者,如果未在截止日期前完成迁移,扩展将无法更新,甚至会被强制下架。更严重的是,Chrome 企业版和 Chrome for Testing 虽然暂时保留 MV2 支持,但长期来看,所有 Chromium 系浏览器(如 Edge、Brave)都会逐步跟进。

3. 社区反应与替代方案

Hacker News 上的讨论异常激烈,不少用户表示将转向 Firefox,因为 Mozilla 明确承诺继续支持 MV2。也有开发者提出“曲线救国”方案:通过本地代理(如 Pi-hole)或自定义 DNS 过滤来实现广告拦截,但这需要一定的技术门槛。此外,一些 MV3 广告拦截器(如 AdGuard 的 MV3 版本)已经出现,但用户普遍反映过滤效果不如 UBO。

技术分析

MV3 的核心设计哲学是“最小权限原则”。它禁止远程代码执行(远程脚本必须打包在扩展内),强制使用 service worker 替代后台页面,并将网络请求拦截改为声明式规则。这种架构确实能减少恶意扩展利用漏洞的可能性,但也带来了几个技术痛点:

  • 规则数量限制:30,000 条静态规则对于大型过滤列表(如 EasyList)来说捉襟见肘,开发者不得不进行规则压缩或分片加载。
  • 动态规则缺失:MV3 虽然支持动态规则,但数量上限仅为 5,000 条,且无法像 MV2 那样基于运行时上下文(如用户点击)即时修改请求。
  • 性能开销:declarativeNetRequest 的匹配引擎在浏览器内部实现,理论上性能更优,但复杂规则集可能导致内存占用上升。

从架构上看,MV3 更适合“轻量级”扩展,而非 UBO 这种依赖大量规则和精细控制的工具。Google 的官方解释是“保护用户隐私”,但讽刺的是,MV3 的规则匹配过程对用户完全透明,用户无法看到哪些请求被拦截、为何被拦截,这反而降低了可审计性。

实践建议

对普通用户

  • 立即检查你的扩展:打开 chrome://extensions,查看是否还有 MV2 扩展。如果有,尽快寻找替代品或准备迁移。
  • 考虑 Firefox 作为备用:Firefox 仍支持 MV2,且 UBO 在 Firefox 上的体验与 Chrome 无异。如果你重度依赖广告拦截,建议换用 Firefox。
  • 尝试 uBlock Origin Lite:虽然功能有所缩减,但作为 MV3 时代的过渡方案,它仍能拦截大部分常见广告和追踪器。

对扩展开发者

  • 尽快迁移到 MV3:Google 已提供迁移工具(如 chrome-extension-mv3-migration),但手动调整不可避免。重点关注 webRequest 到 declarativeNetRequest 的转换。
  • 优化规则集:如果扩展依赖大型过滤列表,考虑使用 ruleResources 动态加载规则,或对规则进行合并、去重。
  • 利用 service worker 替代后台页面:注意 service worker 的生命周期管理,避免因休眠导致功能延迟。
// MV3 service worker 示例
chrome.runtime.onInstalled.addListener(() => {
  chrome.declarativeNetRequest.updateDynamicRules({
    addRules: [{ id: 2, priority: 1, action: { type: "block" }, condition: { urlFilter: "||tracker.com^" } }],
    removeRuleIds: [2]
  });
});

总结

Google 下架 MV2 扩展是浏览器生态演进的一个里程碑,它标志着“扩展即服务”时代的终结,也暴露了平台厂商与开发者、用户之间的利益博弈。对于开发者而言,适应 MV3 不仅是技术升级,更是对商业模式和产品理念的重新思考;对于用户来说,选择权正在被悄然收窄,但 Firefox 等替代品的存在仍保留了“用脚投票”的可能。这场变革没有绝对的对错,但有一点是确定的:在 Web 平台日益封闭的趋势下,保持对技术底层原理的理解,才是应对变化的最佳武器。