Chrome 116 的 Beta 版現已推出,其中包含許多 Chrome 擴充功能開發人員會感興趣的更新。讓我們快速瀏覽一下新功能。
以程式輔助方式開啟 Sidepanel
側邊面板是 Chrome 擴充功能中最多人要求的功能之一,自 Chrome 第 114 版起便已開放使用。推出 Side Panel API 後,我們收到的第一批意見回饋之一,就是開發人員希望能透過程式設計開啟側邊面板。這項功能現已推出 Beta 版。chrome.sidePanel.open
您可以使用這個方法,在程式設計上開啟擴充功能側邊面板,以回應使用者互動行為,例如點選內容功能表:
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 });
}
});
Service Worker 中的 WebSocket 支援
對於許多打算遷移至 Manifest V3 的擴充功能而言,WebSocket 支援功能至關重要。由於所有 WebSocket 活動都會重設 30 秒的服務工作程閒置計時器,Chrome 116 進一步改善了服務工作程式中的 WebSocket 支援功能。也就是說,只要 WebSocket 處於活動狀態,服務工作站就會持續運作。
您可以使用這項功能實作保持連線機制,確保服務工作管理員在等待伺服器傳送訊息時保持處於活動狀態,即使下一個訊息傳送時間超過 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 指南和範例。
服務工作站的強大保留機制
談到服務工作者生命週期,另一項重要的更新也已推出:針對需要使用者互動的 API 提供強制保持連線功能。需要使用者互動的 API 會為擴充功能服務 worker 提供「強制」保留功能 (也就是允許 worker 花費超過 5 分鐘處理此工作):
permissions.request()
desktopCapture.chooseDesktopMedia()
identity.launchWebAuthFlow()
management.uninstall()
在背景錄製音訊和視訊
我們已解決 Manifest V2 和 Manifest V3 之間的另一個差異:您可以使用 tabCapture
和螢幕外文件,在背景錄製音訊和影片。在服務工作者中使用 chrome.tabCapture
API,即可在使用者手勢後取得串流 ID。接著,系統會將這項資訊傳送至螢幕外文件,開始錄製。
請參閱更新版的 tabCapture
指南,瞭解其運作方式。如需實際操作範例,請參閱 分頁擷取 - 錄製器 範例。
新 API:runtime.getContexts()
新的 runtime.getContexts()
API 可讓您擷取與擴充功能相關聯的活動內容資訊。舉例來說,您可以使用此方法檢查是否有有效的離螢幕文件:
const existingContexts = await chrome.runtime.getContexts({});
const offscreenDocument = existingContexts.find(
(c) => c.contextType === 'OFFSCREEN_DOCUMENT'
);
新的非畫面原因:GEOLOCATION
geolocation
已新增為使用螢幕外文件的另一個有效原因。請參閱使用地理位置指南,進一步瞭解如何使用 Offscreen API 取得外掛程式的地理位置。
chrome.action.setBadgeText()
action.setBadgeText
已更新,以解決資訊清單 V2 和資訊清單 V3 之間的不一致性問題。將空字串或 null
傳遞至 action.setBadgeText
,系統會清除指定分頁的徽章文字,並預設為全域徽章文字。
action.setBadgeText({tabId: tabId, text: ''});
摘要:邁向 Manifest V3 的另一個步驟
我們改善了 Service Worker 生命週期支援功能,並更新了 TabCapture API,持續朝著縮小 Manifest V2 和 V3 之間功能差距的目標邁進。請參閱已知問題頁面,瞭解目前的狀態。