Chrome 扩展程序发生了什么情况?

截至目前,2023 年对于 Chrome 扩展程序来说是忙碌的一年。您的宝贵反馈有助于我们改进扩展程序平台和我们的文档。我们还会继续与 WebExtensions 社区论坛中的其他浏览器供应商合作,以使扩展程序 API 在各种浏览器之间更加一致地运行。

在这篇博文中,我们将与您分享 Chrome 扩展程序团队在今年上半年进行的一些更改,以及本季度晚些时候将发布哪些功能。立即开始吧!

新的扩展程序 API 和功能

在本部分,我想重点介绍一些重要的 API 发布,简要回顾其他 API 改进,并分享即将发布的 API 版本。

亮点

屏幕外文档

Offscreen API 是在 Chrome 109 中引入的。它允许 Manifest V3 扩展程序处理需要与 DOM 或窗口进行交互的用例,但此类操作无法在扩展程序 Service Worker 中执行。此外,Chrome 114 还引入了另外两个屏幕外原因:'WORKERS' 用于文档需要生成 worker 的情况,以及 'LOCAL_STORAGE' 用于帮助将数据从 window.localStorage 迁移到 chrome.storage API

从 Chrome 115 开始,您可以在创建屏幕外文档时提供多种原因。这样,您就可以在同一文档中执行两项相关的任务。

新的 Side Panel API 🎉?

过去,在扩展程序中创建边栏的唯一方法是,在每个网页上注入包含内容脚本的新元素。在 Chrome 114 中,发布了 Side Panel API。现在,您可以通过更直接的方式为用户开发配套的边栏体验。详细了解 Side Panel API 如何助您打造卓越的用户体验

一个字典扩展程序,其中会显示所选字词的定义
侧边栏字典扩展程序。请参阅 chrome-extensions-samples 代码库中的代码

更强大的 Service Worker

现在,所有扩展程序事件都会重新启动扩展程序 Service Worker 的空闲计时器。在 Chrome 110 中,移除了扩展程序 Service Worker 的硬性 5 分钟最长生命周期。此外,发送至原生应用的消息和扩展程序中的消息会重新开始空闲计时器。如需了解详情,请参阅 Extension Service Worker 生命周期一文。

更多 API 发布

  • Action API:从 Chrome 110 开始,您可以使用 setBadgeTextColor()getBadgeTextColor() 自定义徽章文字。此外,您还可以使用 isEnabled() 检查当前标签页是否启用了该操作。
  • Commands APIChrome 111 中修复了清单中 "commands._execute_action" 下声明的扩展程序快捷方式在转换为 MV3 期间无法持续存在的 bug。
  • Downloads API:Chrome 的默认下载界面已从底部的任务栏移至多功能框右侧的位置。如需停用此行为,您可以使用 downloads.setUiOptions() 来代替 setShelfEnabled()
  • History APIchrome.history.getVisits()chrome.history.search() 还会返回已同步到本地历史记录数据库的其他设备中的数据。这可能会增加历史记录条目数和访问次数。在 Chrome 115 中将isLocal添加到 VisitItem(预计将在本月晚些时候推出稳定版),以便仅按本地访问次数进行过滤。
  • Identity API:身份验证窗口现在显示为弹出式窗口,而不是占据整个应用窗口。为了在 JavaScript 重定向过程中授予更多控制权,我们添加了两个新选项:abortOnLoadForNonInteractivetimeoutMsForNonInteractive
  • Storage API:在 Chrome 112 中,chrome.session 的存储空间大小增加至 10MB。之后,chrome.local 的存储空间大小已更改为与 Chrome 114 中的大小一致。

即将推出...

即将推出的 Chrome 版本将引入许多功能,让扩展程序可以更轻松地迁移到 Manifest V3。有关即将进行的 MV3 迁移相关变更的列表,请查看我们的已知问题页面。此外,我们计划添加以下功能:

  • DeclarativeNetRequest APIisUrlFilterCaseSensitive 属性的默认值将更改为 false。请参阅 WECG 线程。
  • File Handling API 将允许 ChromeOS 扩展程序打开具有指定 MIME 类型和文件扩展名的文件。此功能目前位于标志背后
  • Runtime API:我们发布了 runtime.getContexts(),以取代已弃用的 extension.getViews()。这样一来,扩展程序便可确定扩展程序页面(例如侧边栏或屏幕外文档)是否已打开。请参阅 WECG 提案。
  • Service Worker:我们即将向以下 Chrome API 添加强大的 keep-alive:用于显示用户提示:permissions.request()desktopCapture.chooseDesktopMedia()identity.launchWebAuthFlow()management.uninstall()
  • Side Panel API:我们将推出 sidepanel.open(),它会以编程方式打开扩展程序侧边栏,以响应用户手势,例如点击上下文菜单。
  • TabCapture API:我们将添加从扩展程序 Service Worker 调用 getMediaStreamId() 并从屏幕外文档的流 ID 获取 MediaStream 的功能。有关示例,请参阅录音和屏幕截图

这些公告在 Chrome Beta 版中推出后,请密切关注扩展程序的新变化页面。

文档升级和更多 Manifest V3 指南

我们也一直在努力改善开发者的学习体验。非常感谢各位抽出宝贵时间在 developer.chrome.com 上提出有关 chromium-group 的问题并报告文档问题。

亮点

  • 新的 MV3 迁移部分提供了将 Manifest V2 扩展程序转换为 Manifest V3 的实用方法。
  • Extension Service Worker 指南提供了有关 Extensions Service Worker 主题的详细信息。包括它们的注册和更新方式、生命周期和导入的工作原理等。
  • 使用 Service Worker 处理事件教程介绍了扩展程序 Service Worker 的基础知识。它构建了一个多功能框扩展程序,可让您快速访问扩展程序的 API 参考页。

更多动态

即将推出...

  • 如何将远程托管的代码迁移到 Manifest V3。
  • 如何为 Chrome 扩展程序运行自动化测试。
  • 改进了声明式网络请求指南。
  • 改进了内容脚本解释器。

💡? 您知道吗?

在结束之前,我们想分享一些实用的工具和数据洞见:

  • Chrome 已开始支持 WebHID;从 Chrome 115 开始,您可以试用一下该 API(但请注意,该功能仍在开发中)。
  • Puppeteer 现在支持使用 --headless=new 在无头模式下进行测试。如需了解详情,请阅读 Chrome 的无头模式升级博文。
  • 借助扩展程序更新测试工具,您可以在清单中检查权限发生更改时会触发哪些警告。这样,您就可以像用户一样体验更新流程。这一点很重要,因为某些权限可能会停用该扩展程序,直到用户再次授予访问权限为止。

让我们保持联系!🙌

今年,扩展程序团队很高兴能在 Google I/O Connect 活动期间与扩展程序开发者面对面交流。我们正在打造可以与您交流的新空间,例如推出焦点小组和聚会活动。

在此期间,请继续在 chromium-groups 中提问,考虑加入 WECG,并在 developer.chrome.com GitHub 代码库中报告所有文档问题。

再次感谢您加入扩展程序开发者社区!