Chrome 116 版擴充功能的新功能

Chrome 116 現已推出 Beta 版,為 Chrome 擴充功能開發人員提供許多令人期待的更新。來看看有哪些新功能吧!

塞巴斯蒂安.班茲 (Sebastian Benz)
Sebastian Benz

透過程式輔助方式開啟側邊面板

「Sidepanel」一直是 Chrome 擴充功能最需要的功能之一,從 114 版起便已推出 Chrome 擴充功能。推出 Side Panel API 後,我們首批意見回饋指出開發人員希望能夠以程式輔助的方式開啟側邊面板。內容如下:chrome.sidePanel.open 目前處於 Beta 版測試階段。您可以使用這個 API,透過程式輔助方式開啟擴充功能側邊面板,藉此回應使用者互動 (例如點選內容選單點擊):

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 活動都會重設 30s Service Worker 閒置計時器。這表示只要 WebSocket 處於有效狀態,Service Worker 就會保持運作。

您可以利用這個程式碼實作保持運作機制,確保在您等待伺服器所寄郵件時,服務工作處理程序仍保持有效,即使需要超過 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 的生命週期,另一項重要更新已經上市:針對需要使用者互動的 API 提供強大的保持運作機制。需要使用者互動的 API 將擁有「強大」保持運作,供擴充功能服務工作站使用 (亦即允許工作站在這項工作中花費超過 5 分鐘):

在背景錄製音訊和視訊

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 已更新,以解決 Manifest V2 和 Manifest V3 之間的不一致。如果將空白字串或 null 傳遞至 action.setBadgeText,系統會清除指定分頁的標記文字,並改為預設通用徽章文字。

action.setBadgeText({tabId: tabId, text: ''});

摘要:邁向 Manifest V3 的另一個步驟

隨著 Service Worker 生命週期支援獲得更完善的支援,並更新了 TabCapture API,我們也將持續朝著目標邁進,設法解決 Manifest V2 和 V3 之間的功能缺口。如要查看目前狀態,請參閱已知問題頁面