Chrome 的扩展开发...我一定要吐槽 Manifest V3

2022-06-23 18:17:14 +08:00
 xifangczy

搜索了以下,发现没人来吐槽?我是忍不住了...那我对没写过扩展的人从头简单讲一讲.

V3 引入了 Service workers 但是又不是真正的 Service workers🙄

Chrome 会每 5 分钟清理所有扩展 Service workers 也就是说,你的扩展最多存活 5 分钟,然后等待用户下次激活。激活方式?我也没看到文档有写只能摸索。

那如果我的工作没做完,要接上次的工作怎么办? google 告诉你用 chrome.storage 类似 localstorage 一样的东西...这...

那如果一直要保持后台的扩展怎么办,很遗憾,目前没办法。广告拦截 Vimium SwitchyOmega 等等 如果升级到 V3 那就是死刑。

https://bugs.chromium.org/p/chromium/issues/detail?id=1271154 论坛里也是怨声载道

听说现在扩展商店页面已经停止提交 V2 版本的新扩展,Chrome 甚至表示 2023 年 1 月消灭所有 V2 扩展 https://developer.chrome.com/blog/mv2-transition/

为了对抗随机的清理事件,出现了很多“肮脏的手段”

https://stackoverflow.com/questions/66618136/persistent-service-worker-in-chrome-extension

甚至有的为了保持持续后台,做两个扩展然后相互唤醒。这种肮脏的手段说不定什么时候就失效了。

这些就算了 还有 V3 的 API 也极其难用,向用户页面注入脚本的 chrome.scripting 到了 102 版本内核以上 才支持在 document-start 里运行..

https://developer.chrome.com/docs/extensions/reference/scripting/#type-ScriptInjection

看参数 injectImmediately 浏览器要求。。

也就是说 在 102 版本之前 tampermonkey 能做到的事情,我一个扩展都做不到。哦..对..如果到了 V3 tampermonkey 也得死

还有个更严重的问题,webRequest 很多扩展特别是广告拦截的扩展这是核心 API ,它可以拦截浏览器访问某个页面..到了 V3 webRequest 不在具有拦截功能。

那怎么办...Chrome 给出了一个新东西 declarativeNetRequest

哎...首先 使用 declarativeNetRequest 创建规则是有数量限制的,3W 条. 光是 uBlock Origin 默认规则就不止 3W 条.

Service workers 里是不能操作 DOM 的 也就是说这些广告拦截如果不做出改变,只能有网址拦截功能 因为不能去分析 DOM

难怪 Firefox 对 V3 的兼容一推再推,出现了奇怪的操作,保持 V2 的前提下引入 V3 的 API🤣刚刚说的 chrome.scripting 在 firefox V2 里也能使用了。(需要 firefox 102 版以上)

附上一个来自 adguard 的吐槽

https://adguard.com/zh_cn/blog/manifestv3-timeline.html

如果 google 执意强推 V3 并不做出改变...firefox 会成为赢家

说起来我有点期待 2023 了

4125 次点击
所在节点    Chrome
21 条回复
lingyired
2022-10-02 16:29:14 +08:00
像之前那些定时检查邮件插件在 mv3 还有办法实现吗。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/861729

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX