Chrome 116 版擴充功能的新功能

Chrome 116 Beta 版現已推出,其中包含許多令人期待的 Chrome 擴充功能開發人員更新。讓我們快速瞭解有哪些新功能。

以程式輔助方式開啟側邊面板

側邊面板是 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 支援至關重要。Chrome 116 進一步改善了服務工作人員的 WebSocket 支援,因為所有 WebSocket 活動都會重設 30 秒服務工作人員閒置計時器。也就是說,只要 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 指南範例

Service Worker 的強效存活機制

說到 Service Worker 生命週期,我們還有一項重要更新:需要使用者互動的 API 現在支援強效存留機制。需要使用者互動的 API 會為擴充功能服務工作人員提供「強效」的存活時間 (也就是允許工作人員執行這項工作超過 5 分鐘):

在背景錄製音訊和影片

Manifest V2 和 Manifest V3 之間的另一個差距也已縮小:您可以使用 tabCapture 和螢幕外文件在背景錄製音訊和影片。在 Service Worker 中使用 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_DOCUMENT9;
  );

新的螢幕外原因:地理位置

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 之間的功能差距。如要瞭解目前狀態,請參閱已知問題頁面