Chrome 116 の拡張機能の新機能

Chrome 116 のベータ版がリリースされました。Chrome 拡張機能のデベロッパー向けに、多くのエキサイティングなアップデートが含まれています。新機能を簡単に見ていきましょう。

Sebastian Benz 氏
Sebastian Benz

プログラムでサイドパネルを開く

サイドパネルは Chrome 拡張機能で最もご要望の多かった機能の一つで、Chrome バージョン 114 以降でご利用いただけます。Side Panel API のリリース後、最初に寄せられたフィードバックの一つが、「デベロッパーがサイドパネルをプログラムで開けたい」というものでした。こちらです。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 のサポート

WebSocket のサポートは、Manifest V3 への移行を計画している多くの拡張機能にとって重要です。Chrome 116 では、すべての WebSocket アクティビティが 30 秒の Service Worker アイドル タイマーをリセットするため、Service Worker での WebSocket サポートがさらに改善されています。これは、WebSocket がアクティブである限り、Service Worker が動作し続けることを意味します。

これを使用してキープアライブ メカニズムを実装すれば、サーバーからメッセージが届くのを待っている間、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 向けの強力なキープアライブ

Service Worker のライフサイクルに関して、もう 1 つ重要なアップデートがリリースされました。それは、ユーザー操作を必要とする API の強力なキープアライブです。ユーザーの操作を必要とする API には、拡張機能 Service Worker の「強力な」キープアライブがあります(つまり、ワーカーはこのタスクに 5 分以上かかります)。

バックグラウンドで音声と動画を記録しています

Manifest V2 と Manifest V3 のもう一つのギャップが解消されました。tabCapture と画面外ドキュメントを使用して、バックグラウンドで音声と動画を録画できます。Service Worker で 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()

Manifest V2 と Manifest V3 の間の不一致に対処するため、action.setBadgeText を更新しました。空の文字列または nullaction.setBadgeText に渡すと、指定したタブのバッジテキストが消去され、代わりにグローバル バッジテキストがデフォルトで使用されます。

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

まとめ: Manifest V3 への新たな一歩

Service Worker のライフタイム サポートの改善と TabCapture API の更新により、Manifest V2 と V3 の機能のギャップを埋めるという目標に向けて取り組みを続けています。現在のステータスについては、既知の問題のページをご覧ください。