到目前为止,2023 年在 Chrome 扩展程序领域是充实的一年。感谢您提供宝贵的反馈,这有助于我们改进扩展程序平台和文档。我们还将继续与 WebExtensions 社区群组中的其他浏览器供应商合作,以便扩展程序 API 在各浏览器中的运行更加一致。
在本文中,我们将分享 Chrome 扩展程序团队在上半年完成的一些变更,以及本季度晚些时候将发布的即将推出的功能。让我们开始吧!
新的扩展程序 API 和功能
在本部分中,我想重点介绍一些重要的 API 发布,简要介绍其他 API 改进,并分享即将发布的 API。
亮点
屏幕外文档
Offscreen API 在 Chrome 109 中推出。它允许 Manifest V3 扩展程序处理需要与 DOM 或窗口互动的用例,而这些用例无法在扩展程序 Service Worker 中执行。此外,Chrome 114 还引入了另外两个屏幕外原因:'WORKERS'
用于在文档需要生成工作器的实例中,'LOCAL_STORAGE'
用于帮助将数据从 window.localStorage
迁移到 chrome.storage
API。
从 Chrome 115 开始,您可以在创建离屏文档时提供多个原因。这样,您就可以在同一文档中执行两项相关任务。
全新的侧边栏 API 🎉?
过去,在扩展程序中创建边栏的唯一方法是在每个网页上通过内容脚本注入一个新元素。Chrome 114 中推出了 Side Panel API。现在,您可以更轻松地为用户开发配套边栏体验。详细了解如何利用 Side Panel API 设计出卓越的用户体验。
更强大的 Service Worker
现在,所有扩展程序事件都会重启扩展程序服务工件的空闲计时器。在 Chrome 110 中,我们移除了扩展程序服务 worker 的 5 分钟硬性生命周期上限。此外,发送到原生应用和扩展程序内的消息也会重启空闲计时器。如需了解详情,请参阅扩展程序服务工件生命周期一文。
推出更多 API
- Action API:从 Chrome 110 开始,您可以使用
setBadgeTextColor
() 和getBadgeTextColor()
自定义徽章文本。此外,您还可以使用isEnabled()
检查当前标签页是否启用了相应操作。 - Commands API:修复了以下 bug:在转换为 MV3 期间,在清单中的
"commands._execute_action"
下声明的扩展程序快捷方式不会保留。Chrome 111 - Downloads API:Chrome 中的默认下载内容界面已从底部的搁架移至万能搜索框的右侧。如需停用此行为,您可以使用
downloads.setUiOptions()
替换setShelfEnabled()
。 - History API:
chrome.history.getVisits()
和chrome.history.search()
还会返回已同步到本地历史记录数据库的其他设备中的数据。这可能会导致历史记录条目增多,以及访问次数增加。Chrome 115(预计于本月底发布稳定版)在VisitItem
中添加了isLocal
,以便仅按本地访问进行过滤。 - Identity API:身份验证窗口现在显示为弹出式窗口,而不是占据整个应用窗口。为了在 JavaScript 重定向过程中提供更强大的控制功能,我们添加了两个新选项:
abortOnLoadForNonInteractive
和timeoutMsForNonInteractive
。 - Storage API:在 Chrome 112 中,
chrome.session
存储空间大小已增加到 10 MB。然后,在 Chrome 114 中更改了chrome.local
存储空间大小,使其与之一致。
即将推出…
即将发布的 Chrome 版本将引入许多功能,以便扩展程序更轻松地迁移到 Manifest V3。如需查看即将发生的与 MV3 迁移相关的变更列表,请访问我们的已知问题页面。此外,我们还计划添加以下功能:
- DeclarativeNetRequest API:isUrlFilterCaseSensitive 属性的默认值将更改为
false
。请参阅 WECG 会话。 - 借助 File Handling API,ChromeOS 扩展程序可以打开具有指定 MIME 类型和文件扩展名的文件。此功能目前处于标志后台。
- Runtime API:我们将发布
runtime.getContexts()
来替代已废弃的extension.getViews()
。这样,扩展程序就可以确定侧边栏或屏幕外文档等扩展程序页面是否处于打开状态。请参阅 WECG 提案。 - 服务工件:我们将向显示用户提示的 Chrome API 添加强效的保活机制:
permissions.request()
、desktopCapture.chooseDesktopMedia()
、identity.launchWebAuthFlow()
和management.uninstall()
。 - 侧边栏 API:我们将推出
sidepanel.open()
,该 API 可在响应用户手势(例如点击上下文菜单)时以编程方式打开扩展程序侧边栏。 - TabCapture API:我们添加了从扩展程序服务工作器调用
getMediaStreamId()
并从屏幕外文档中的串流 ID 获取 MediaStream 的功能。如需查看示例,请参阅录音和屏幕截图。
请关注扩展程序新变化页面,以便在这些功能在 Chrome Beta 版中推出后立即了解相关动态。
文档升级和更多 Manifest V3 指南
我们还一直在努力改善开发者的学习体验。非常感谢您抽出宝贵时间在 chromium-group 上提问,并在 developer.chrome.com 上报告文档问题。
亮点
- 新增的 MV3 迁移部分提供了将 Manifest V2 扩展程序转换为 Manifest V3 的实用方法。
- 扩展程序服务工件指南详细介绍了扩展程序服务工件主题。其中包括注册和更新方式、生命周期、导入方式等。
- 使用 Service Worker 处理事件教程介绍了扩展程序 Service Worker 的基础知识。它会构建一个多功能框扩展程序,以便您快速访问扩展程序 API 参考页面。
更多动态
- 使用 Google Analytics 4演示了如何跟踪扩展程序弹出式窗口和服务工事件的使用情况。
- 使用地理定位介绍了如何使用 Offscreen API 获取扩展程序的地理位置。
- 音频录制和屏幕截图介绍了如何使用
chrome.tabCapture
和navigator.mediaDevices.getDisplayMedia()
API 从标签页、窗口或屏幕中截取音频和视频。 - 我们在调试扩展程序指南中添加了新的调试提示。
- 我们更新了权限警告指南,以便您更轻松地了解权限警告的运作方式,以及如何提供更好的用户体验。此外,您还可以通过一些实用的方法来检查用户会看到哪些警告。
- 我们的团队和贡献者还添加了新的清单 V3 扩展程序示例:扩展程序中的 WASM、Scripting API 演示、侧边栏 API 食谱和 DeclarativeNetRequest API 示例。您可以在我们的 GitHub 示例代码库中探索其他扩展程序示例。
即将推出…
- 如何将远程托管代码迁移到 Manifest V3。
- 如何为 Chrome 扩展程序运行自动化测试。
- 改进了声明式网络请求指南。
- 改进了内容脚本说明。
💡? 您知道吗?
在结束之前,我们想分享几个实用工具和数据分析:
- Chrome 开始支持 WebHID;从 Chrome 115 开始,您可以试用该 API(但请注意,该 API 仍在开发中)。
- Puppeteer 现在支持使用
--headless=new
在无头模式下进行测试。如需了解详情,请参阅 Chrome 无头模式升级博文。 - 借助扩展程序更新测试工具,您可以查看在清单中更改权限时会触发哪些警告。这样,您就可以像用户一样体验更新流程。这一点很重要,因为某些权限可能会停用扩展程序,直到用户再次授予访问权限。
欢迎与我们联系!🙌
今年,扩展程序团队很高兴能在 Google I/O Connect 活动期间与扩展程序开发者面对面交流。我们正在努力打造新的交流空间,以便与您建立联系,例如推出焦点小组和聚会活动。
与此同时,请继续在 chromium-groups 上提问,考虑参与 WECG,并在 developer.chrome.com GitHub 代码库上报告任何文档问题。
再次感谢您加入扩展程序开发者社区!