Manifest V3 概述
Manifest V3 (MV3) 是朝着我们的扩展平台愿景迈出的重要一步。MV3 专注于该愿景的三大支柱:隐私、安全和性能,同时保留和改进我们的能力和网络基础。
本文总结了 MV3 引入的特性和主要变化。如需帮助将 Manifest V2 扩展迁移到 MV3,或更好地了解这些更改对架构的影响,另请参阅 MV3 迁移指南。
Manifest V3 从 Chrome 88 开始可用,Chrome Web Store 于 2021 年 1 月开始接受 MV3 扩展。
新功能和更改将继续添加到 MV3,就像它们在早期清单版本中一样。
# 功能总结
使用 MV3 的扩展有许多新特性和功能更改:
- Service workers替换background pages。
- 现在使用新的 declarativeNetRequest API 处理网络请求修改。
- 不再允许远程托管代码;扩展只能执行包含在其包中的 JavaScript。
Promise
支持已添加到许多方法中,但仍支持回调作为替代方法。 (我们最终将支持对所有适当方法的承诺。)- MV3 中还引入了许多其他相对较小的功能更改。
以下各节总结了这些更改中的每一个。
# 主要特点
本节介绍 MV3 最重要和最有影响力的功能
# Service workers
Manifest V3 用 Service Worker 替换了后台页面。
与他们的网页对应物一样,扩展 service workers监听并响应事件以增强最终用户的体验。对于 Web 服务工作者来说,这通常意味着管理缓存、预加载资源和启用离线网页。虽然扩展 service workers仍然可以完成所有这些,扩展包已经包含了可以离线访问的资源包。因此,扩展 service workers倾向于专注于对 Chrome 扩展 API 公开的相关浏览器事件做出反应。
# 网络请求修改
扩展修改网络请求的方式在 MV3 中发生了变化。有一个新的 declarativeNetRequest API,它允许扩展以保护隐私和高性能的方式修改和阻止网络请求。这个API的本质是:
- 该扩展程序不是拦截请求并按程序修改它,而是要求 Chrome 代表它评估和修改请求。
- 该扩展声明了一组规则:匹配请求的模式和匹配时要执行的操作。然后,浏览器按照这些规则的定义修改网络请求。
使用这种声明式方法大大减少了对持久主机权限的需求。
//对于某些用例(例如重定向请求),某些扩展程序可能仍需要广泛的主机权限。有关更多详细信息,请参阅[条件权限和 declarativeNetRequest](./mv3-migration.md)。
webRequest API 的阻塞版本仅限于 MV3 中强制安装的扩展。这是因为阻塞 webRequest 方法存在问题:
- 隐私:这需要对用户数据的过度访问,因为扩展需要读取为用户发出的每个网络请求。
- 性能:跨多个进程跃点序列化和反序列化数据以及 C++/JS 边界加起来。
- 兼容性:不适用于基于事件的后台执行,因为它需要运行 Service Worker 来处理每个请求。
这意味着开发人员可以实现许多常见用例,例如内容阻止功能,而无需任何主机权限。
# 远程托管代码
MV3 中的一个关键安全改进是扩展不能加载远程代码,如 JavaScript 或 Wasm 文件。这让我们可以更可靠、更有效地检查扩展程序提交到 Chrome 网上应用店时的安全行为。具体来说,所有逻辑都必须包含在扩展包中。
我们推荐使用远程配置文件而不是远程代码。有关如何处理此更改的更多信息,请参阅迁移指南。
# Promise
MV3 为 Promise 提供了一流的支持:现在许多流行的 API 都支持 Promise,我们最终将在所有适当的方法上支持 Promise。
您可以使用promise chains以及 async/await。如果您提供对 API 方法的回调,这会阻止返回promise。因此,您可以推迟迁移的这一部分,直到您准备好,或者立即开始使用 Promise。
某些场景(例如事件侦听器)仍需要回调。
# 其他特性
MV3 中还引入了许多其他更改:
- Action API consolidation:浏览器操作和页面操作 API 统一为一个操作 API。
- Web 可访问资源:这些资源现在仅可用于指定的站点和扩展。
- 内容安全策略 (CSP):您现在为单个对象中的不同执行上下文指定单独的 CSP,并且某些策略是不允许的。
- executeScript() 更改:扩展不能再执行任意字符串,只能执行脚本文件和函数。此方法也正在从 Tabs API 迁移到新的 Scripting API。
以下功能将很快添加到 MV3:
- 动态内容脚本:新的Scripting API 允许扩展在运行时注册和取消注册内容脚本。
- 新的favicon API:这个新的 JavaScript API 取代了“
chrome://favicon
”,并为开发人员提供了一种检索网站图标的方法。 - In-memory storage(内存存储):Storage API 上的一个新 StorageArea,可用于在 Service Worker 重新启动时将值存储在内存中。
查找这些和其他 MV3 功能可用时的公告。
By.一粒技术服务