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.一粒技术服务

results matching ""

    No results matching ""