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

> 来源：[HackerNews](https://webiterate.dev/google-removed-extensions-ublock-origin-108/)

## 背景与概述

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 条），无法动态修改请求头或响应体。

```json
// 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 的生命周期管理，避免因休眠导致功能延迟。

```javascript
// 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 平台日益封闭的趋势下，保持对技术底层原理的理解，才是应对变化的最佳武器。