2018 年年末,谷歌宣布计划对 Chrome 的扩展系统进行改动“升级”,升级后的版本叫做 Manifest V3[1]。

Manifest V3 对 Chrome 的扩展 API 做出了一些调整。其中一个关键的调整是针对 webRequest API[2] 的。webRequest API 提供了监听、修改、拦截网络请求的能力。许多扩展应用都使用了这个 API 来实现内容和广告拦截等功能。Manifest V3 计划限制或者移除webRequest API 的修改拦截网络请求的能力,只保留监听的能力。

Manifest V3 定义了一个新的 declarativeNetRequest API[3]用来进行内容拦截。不同于 webRequest 将网络请求转发给扩展进行处理,扩展应用可以使用任意的规则来实现拦截功能,declarativeNetRequest 只能由 Chrome 来处理网络请求,扩展只能告诉 Chrome 拦截规则,所以这个 API 叫做 declarative (声明式的)。拦截规则是一个静态的基于 Adblock Plus 的 URL 匹配规则的列表,并且规则数量被限制为最多 30,000 条。而许多广告拦截扩展的规则更为先进和强大,无法用 declarativeNetRequest 提供的规则来表述,而且规则的数量大都在 100,000 条以上。所以说 declarativeNetRequest 的能力相比 webRequest 是大幅削弱了的。

Manifest V3 设计文档公布后,引起了扩展开发者的很大反响[4]。目前最流行的广告拦截扩展 uBlock Origin 的开发者 Raymond Hill 认为这一改动相当于宣告 uBlock Origin 死了[5][6]。隐私保护扩展 Ghostery 认为这一做法会实际上消灭广告拦截和隐私保护扩展[7]。

媒体网站 9to5Google 对此事做了一系列的持续报导[8],并在上个月 (5月) 爆料 Chrome 将对企业用户继续提供 webRequest API 拦截能力,又为此事引起了许多关注[9]。

本周 (06-12) Chromium 官方博客上也发文对 Manifest V3 进行了解释[10],并表示会增加一些 declarativeNetRequest 的能力,包括动态添加规则列表,加入修改请求头的能力等,并计划把每个扩展 30,000 条规则的限制改为所有扩展总共 150,000 条规则的限制。

谷歌对这个改动的解释是为了提升浏览器的安全性和性能。这个改动会减少恶意扩展对用户信息的获取,减少扩展对浏览器性能的影响。

但扩展开发者的观点与谷歌恰恰相反。他们认为扩展应用通过拦截广告和追踪器,提高了用户的浏览体验并更好的保护了用户的安全隐私,而这个改动大幅削弱了扩展能为用户提供的帮助。而谷歌给出的理由也是站不住脚的,广告拦截扩展对性能影响不大,而且 webRequest API 依然可以监听网络请求。

Raymond Hill 对谷歌这一改动的个人观点说的很明白[11]:谷歌依赖广告收入,而广告过滤器会影响谷歌的收入,但 Chrome 为了获取用户需要支持内容过滤扩展。谷歌的策略就是在 Chrome 获取用户和防止广告过滤伤害自己的收入之间进行平衡。现在 Chrome 已经有了市场统治地位,平衡就开始倾斜于有利于广告收入的这一端了。

其实安卓平台上 Chrome 从来不支持扩展,没有任何广告拦截能力,但依然有很大用户量。相比起来 iOS Safari 还是支持内容拦截的,因为苹果不依赖网页广告挣钱 :) 。而与浏览器相比,移动应用的广告就更难拦截了。浏览器做为 user agent 是用户的代理人,用户还是有一定决定权决定显示什么内容的,而 APP 只能算是应用开发者的代理人了吧。

目前 Manifest V3 还在开发过程中,后续会怎样发展,还需进一步观察。

参考来源:

  1. https://docs.google.com/document/d/1nPu6Wy4LWR66EFLeYInl3NzzhHzc-qnk4w4PX-0XMw8/edit
  2. https://developer.chrome.com/extensions/webRequest
  3. https://developer.chrome.com/extensions/declarativeNetRequest
  4. https://groups.google.com/a/chromium.org/d/topic/chromium-extensions/veJy9uAwS00
  5. https://github.com/uBlockOrigin/uBlock-issues/issues/338#issuecomment-456179825
  6. https://bugs.chromium.org/p/chromium/issues/detail?id=896897#c23
  7. https://www.ghostery.com/blog/ghostery-news/will-google-block-ad-blockers-and-privacy-extensions/
  8. https://9to5google.com/guides/manifest-v3/
  9. https://news.ycombinator.com/item?id=20044430
  10. https://blog.chromium.org/2019/06/web-request-and-declarative-net-request.html
  11. https://github.com/uBlockOrigin/uBlock-issues/issues/338#issuecomment-496009417