Firefox 扩展逐渐过渡到 WebExtension 的一些改变

Firefox 扩展逐渐过渡到 WebExtension 的一些改变

xuyuehangxuyuehang

请允许我先说句题外话😂:最近对第三方网站的测试压力繁重,几乎顾不上优化现有功能和体验了,和去年同期比兼容性问题增加了一倍还多,虽然火狐在国内的市场份额并不高,但给所有浏览器用户最完整的功能实现相信是每个互联网公司的追求,希望关注专栏的各位前端大大在做 Web 端适配时考虑下多浏览器兼容,至少在火狐中跑一遍 Case,毕竟有些标准还是有所不同,在此先谢过了_(:з」∠)_

API 支持可以参考:Can I use... Support tables for HTML5, CSS3, etc

语法可以参考 MDN:Web 技术文档

以下是正文:

——

预计今年 11 月发布的 Firefox 57 版本中,经典 Add-ons 将停止支持,它们将不再支持 Release 版本的 Firefox,扩展将全面迁移至 WebExtension。WebExtensions 是用于开发跨浏览器的扩展系统。在很大程度上该系统与 Google Chrome 和 Opera 支持的扩展 API 兼容。在这些浏览器中编写的扩展只需进行少量修改便能适配至 Firefox 或 Microsoft Edge。WebExtension API 也与多进程 Firefox 完全兼容。

不过换言之新的扩展系统将不具备原先经典 Add-ons 的扩展能力,一些无法迁移的扩展也许将在这个版本停止支持,有关扩展支持的情况可参考我的这篇回答:在 Firefox 57 时代,哪些拓展将会消失?

这个改变对经典 Add-ons 的重度用户来说是个不小的打击,Mozilla 也在尽可能补充相关的 WebExtension API,是原有扩展的一些功能可以通过新的 API 实现,我们可以说如果在 57 版本发布后一些常用扩展实在无法迁移,还可以保存一份豪华完整版的 Firefox 56 并关掉自动更新(笑)。距离这个里程碑式的版本还有半年的时间,我们可以看到 Mozilla 在通过一些方式来帮助用户和开发者完成迁移,下面简单列举一下:

1.减少 Firefox 中的 XUL 元素

如果你的火狐开启了多进程(e10s),Firefox 的开发工具里面的响应式设计模式(Ctrl+Shift+M)可以看到已经和之前不同,新的响应式界面增加了设备选择功能,也完全使用 HTML,React 和 Redux 等技术来重写。

Firefox 内置的播放器也使用了 HTML5 编写来替代 XUL,界面有一些小小的变化,下图上面是新设计下面是旧设计。

很多扩展,例如 LastPass 等,都在使用标签页来取代原有的设置界面。

2.添加对混合式扩展的支持

传统扩展(legacy add-on)是指 bootstrapped 扩展或基于 Add-on SDK 的扩展,混合式扩展就是指在传统的扩展里面嵌入 WebExtensions,实现他们之间的互相通信。但对于开发者而言,这需要一个过渡期,尤其是那些受欢迎的扩展迁移更加困难,所以 Mozilla 通过这个混合式扩展帮助开发者逐渐迁移他们的扩展至 WebExtensions,混合式扩展也可以实现扩展当中数据的迁移。被嵌入在传统扩展里面的 WebExtensions 称为可嵌入的 WebExtensions(embedded WebExtensions),其文件可以打包进传统的扩展当中,但 WebExtensions 无法直接和传统扩展共享,而是通过 runtime API 里面定义的有关消息函数来进行通信。

Test Pilot 项目中的 Containers(标签页容器)正是使用了这一方案,使正式版用户可以提前使用到原先 Nightly 和 Aurora 中的 API。

相关的文档介绍:Embedded WebExtensions

3.协助开发者完成扩展的迁移

Firefox 48 开始引入 e10s 功能,但默认安装扩展以后就关闭 e10s。49 的时候稍微放宽限制,即允许 WebExtensions 和少量清单内的扩展安装以后仍会默认开启 e10s。中国版自带的“网页截图”是 AMO 排行前 4 的扩展,48 版本引入部分 WebExtension API 后,AMO 优先联系了榜单中的人气扩展,希望作者完成迁移。

不过由于新的 API 限制,一些原有扩展中的功能,例如“网页截图”中的设置菜单,快捷键都被取消。

Tab Mix Plus 是 Firefox 最受欢迎的标签页定制类扩展,功能丰富且强大。不过作为传统的扩展,显然会在 Firefox 57 到来只支持 WebExtensions 时候挂掉。它需要重写才能支持 WebExtensions,并且很多 WebExtensions API 都还在开发当中,即便重写也会有很多功能被阉割掉。

Mozilla 也在研究帮助开发者实现 TMP 兼容 WebExtensions。具体在这里:1333837 - [meta] Tab management enhancements (existing tab infrastructure)

其中部分功能已经有对应的 WebExtensions API 了,例如浏览进程管理、高级设置还有一些事件设置。

4.减少不兼容扩展的安装量

经过了几个版本的周期,Mozilla 对新扩展的提交也增加了限制,Firefox 53 开始,AMO 官方附加组件中心只支持新的 WebExtensions 扩展的提交,不接受任何新的传统扩展的提交。但传统扩展的更新版本仍会接受提交,传统扩展可使用到 Firefox 57 版本。

如果你使用的是 Nightly,在今年 5 月 5 号的版本更新中不支持 e10s 或者非 WebExtension 的扩展将默认被禁用,这同样是为了帮助 Firefox 团队对即将到来的 57 版本提供反馈和进行测试。毕竟这些扩展在 57 版本也将会被禁用。

当然这个设置是可以更改的,在地址栏输入 about:config,搜索 extensions.allow-non-mpc-extensions 将值改成 true 即可使用原有 Add-ons。

参考:Add-ons/ShimsNightly - MozillaWiki

5.AMO 显示的一些更改

对于 WebExtensions 扩展,AMO 在其主页标题名称旁会显示兼容 Firefox 57+。

页面右下角“标签”中的 firefox57 可以列出所有 WebExtension 扩展,目前这个分组已经几乎覆盖到所有 WebExtension 扩展:标签 :: Firefox 附加组件

另外在做一个东西是在火狐“已安装的扩展列表”里显示是否兼容,非 WebExtensions 的传统扩展会标记为旧式,即 LEGACY,目前已在 Nightly 版本实现:

6.为不支持的传统扩展提供替代方案

这可能是终极招数了,Mozilla 计划在 57 版本时推出一个寻找替代扩展的功能。在附加组件管理器增加一个“未支持”的版块,专门罗列因为不兼容 WebExtensions 的传统扩展,这意味这些扩展不是直接被卸载删除,而是禁用并放在此处。

选项包括两个,一个是 Find a replacement(寻找替代扩展),另一个是 Remove (移除)。 我们知道对应的替代扩展未必完全满足原扩展功能需求,所以可以预见点击这个按钮会有以下几种情况:

  1. 建议的替代扩展可以完全实现现有扩展功能或绝大部分功能。
  2. 建议的替代扩展只能满足一部分功能。
  3. 无替代扩展,要么完全没有此类扩展,要么 API 还不支持。

这也是 Mozilla 计划推出的帮助原来的老用户尽可能顺利迁移的一个方案,但目前来看一些强力扩展基本没有替代方案,希望未来半年能有一些迅速提升吧。

文章被以下专栏收录
27 条评论
推荐阅读