Chrome 116 现已推出 Beta 版,为 Chrome 扩展程序开发者带来了许多令人兴奋的更新。我们来快速了解一下新变化。
以编程方式打开侧边栏
侧边栏是 Chrome 扩展程序中用户呼声最高的功能之一,自 Chrome 114 版起便已在 Chrome 中提供。推出 Side Panel API 后,我们收到的首批反馈之一是,开发者希望能够以编程方式打开侧边栏。现在,chrome.sidePanel.open
已推出 Beta 版。您可以使用它以程序化方式打开扩展程序侧边栏,以响应用户互动,例如点击上下文菜单:
chrome.contextMenus.onClicked.addListener((info, tab) => {
if (info.menuItemId === 'openSidePanel') {
// This will open the panel in all the pages on the current window.
chrome.sidePanel.open({ windowId: tab.windowId });
}
});
服务工件中的 WebSocket 支持
对于许多计划迁移到 Manifest V3 的扩展程序,WebSocket 支持至关重要。Chrome 116 进一步改进了服务工作器中的 WebSocket 支持,因为所有 WebSocket 活动都会重置 30 秒的服务工作器空闲计时器。这意味着,只要您的 WebSocket 处于活跃状态,服务工作器就会保持活跃状态。
您可以使用它来实现一个 keepalive 机制,确保您的服务工件在等待来自服务器的消息时保持活跃状态,即使下一条消息需要超过 30 秒才能到达也是如此:
function keepAlive() {
const keepAliveIntervalId = setInterval(
() => {
if (webSocket) {
webSocket.send('keepalive');
} else {
clearInterval(keepAliveIntervalId);
}
},
// It's important to pick an interval that's shorter than 30s, to
// avoid that the service worker becomes inactive.
20 * 1000
);
}
如需了解详情,请参阅我们的新版 WebSocket 指南和示例。
为服务工件提供强大的 keepalive
说到服务工作器生命周期,我们还推出了另一项重要更新:针对需要用户互动的 API 提供强效的 keepalive。需要用户互动的 API 将针对扩展程序服务工作器提供“强”保持连接(即允许工作器花费超过 5 分钟的时间来执行此任务):
permissions.request()
desktopCapture.chooseDesktopMedia()
identity.launchWebAuthFlow()
management.uninstall()
在后台录制音频和视频
Manifest V2 和 Manifest V3 之间的另一个差距已消除:您可以使用 tabCapture
和屏幕外文档在后台录制音频和视频。在服务工作器中使用 chrome.tabCapture
API 可在用户执行手势后获取串流 ID。然后,可以将其传递给屏幕外文档以开始录制。
请参阅更新后的 tabCapture
指南,了解其运作方式;如需查看实例,请参阅 Tab Capture - Recorder 示例。
新 API:runtime.getContexts()
借助新的 runtime.getContexts()
API,您可以提取与您的扩展程序关联的活动上下文的相关信息。例如,您可以使用它检查是否有处于活动状态的屏幕外文档:
const existingContexts = await chrome.runtime.getContexts({});
const offscreenDocument = existingContexts.find(
(c) => c.contextType === 'OFFSCREEN_DOCUMENT'
);
新的离线原因:地理位置
添加了 geolocation
,作为使用屏幕外文档的另一个有效原因。请参阅我们的使用地理位置信息指南,详细了解如何使用 Offscreen API 获取扩展程序的地理位置信息。
chrome.action.setBadgeText()
action.setBadgeText
已更新,以解决 Manifest V2 和 Manifest V3 之间的不一致问题。将空字符串或 null
传递给 action.setBadgeText
会清除指定标签页的标记文本,并改为默认使用全局标记文本。
action.setBadgeText({tabId: tabId, text: ''});
摘要:朝着 Manifest V3 迈进了一步
通过改进的 Service Worker 生命周期支持和更新后的 TabCapture API,我们在缩小 Manifest V2 和 V3 之间的功能差距方面取得了进一步进展。请访问我们的已知问题页面,了解当前状态。