这几天回顾 Chrome Extension MV3,发现官方发布了一篇文章:Known issues when migrating to Manifest V3,准备结合我的经验,摘译过来分享给大家。建议大家还是要看一下原文,而且这篇文章也在不断更新,如果有新内容,也麻烦提醒我更新。目前版本是:2022-12-09,Chrome 108。
这篇文章列举了已知的、影响开发者将插件迁移到 MV3 的重大问题。答题分为两部分:
- 兼容性问题。因为 MV3 的设计而产生的问题。
- Bug。纯粹没搞好。
这篇文章是 Chromium issue 追踪器的子集,全部问题大家可以自行通过标签查找:平台 > 扩展。
新功能完成或者 bug 解决后,会随着稳定版发布。之后,对应的问题就会从这个页面里移除,所以,如果大家想知道问题变更的历史记录,可以去看: What’s New in Chrome Extensions。
兼容性
【已修复】webRequest.onAuthRequired
events
普通用户安装的 MV3 扩展无法拦截事件。在 Chrome 108 中已修复。
【已修复】Offscreen Documents API
MV3 强制把 background page/script 改成 service worker,带来一个问题:以前的 background page 可以渲染页面,也就包含了完整的 DOM API,如今没有了,那么很多依赖 DOM 的功能也都做不到了。比如剪贴板、音乐播放、解析 HTML 等。所以新版本 Chrome 109 里增加了新的 Offscreen Documents API,方便用户使用。
目前这个 API 的文档很简单,我用 Edge,目前还停留在 108 版本,也没能试用,回头体验了再分享。
放宽扩展 Service worker 的生命时间
目前扩展 Service worker 执行一段时间之后就会被终止掉,据我测试大约是 28 秒。未来这个时间长度会动态调整,以便 service worker 的功能能够稳定完成。预计 2023 年一季度开始测试此功能。
用户脚本管理支持
目前扩展不允许执行外部脚本,只能执行发布时已经打包进去的那些脚本。导致 GA、FB 这些平台 SDK 很难用,Showman 也一样。下一步,MV3 会提供一个管理工具,让用户授权一些特定代码和样式。
预计也是 2023 年一季度开始测试。
给 Storage API 扩容
目前 Storage 的存储空间是 1MB,开发团队准备适当扩容,具体的数字还没想好。我对这个变化没啥期待,Storage 本来也就存点配置之类的信息,感觉 1M 能存很多了。
Bugs
【已修复】Service workers 在 webRequest
时间后不启动
之前的版本中,MV3 扩展只会在安装后的很短时间里,能够接收到 Web Request API 事件,后面就接收不到了。如今,这个 bug 修复了,发布于 Chrome 107。
(容我吐个槽,刚开始推广 MV3 的时候,这种 bug 不胜枚举。)
沙箱页面 CSP 不能配置
现在的沙箱页面 CSP 无法被用户自定义配置覆盖,会固定使用初始值。大约会在 2023 年一季度开始测试修复。
总结
看看这些设计导致的兼容性问题,和开发引入的质量 bug,当初他们有什么信心在 2023 年 1 月完成彻底迁移的?
我还是那个观点:
- MV3 的设计有其合理之处,相对于 MV2 确实是进步
- MV3 整个 API 和文档的质量堪忧,给我们带来了大量不必要的工作量
- 插件变现很难,大家都用爱发电,这次强推 MV3 实在是不把开发者当人
- 希望新的一年里,MV3 能建设完全,并逐步升级
如果你在开发插件的时候遇到问题,欢迎与我交流。
欢迎吐槽,共同进步