Chrome 116 版擴充功能的新功能

Chrome 116 的 Beta 版現已推出,其中包含許多 Chrome 擴充功能開發人員會感興趣的更新。讓我們快速瀏覽一下新功能。

以程式輔助方式開啟 Sidepanel

側邊面板是 Chrome 擴充功能中最多人要求的功能之一,自 Chrome 第 114 版起便已開放使用。推出 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 });
  }
});

Service Workers 中的 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 分鐘處理此工作):

在背景錄製音訊和視訊

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