Chrome 116 のベータ版がリリースされました。このバージョンには、Chrome 拡張機能のデベロッパー向けの多くの新機能が含まれています。新機能について簡単に説明します。
プログラムでサイドパネルを開く
サイドパネルは、Chrome 拡張機能で最もリクエストの多かった機能の 1 つで、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 は存続します。
これを使用して、次のメッセージが届くまで 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 の強力なキープアライブという、もう 1 つの重要なアップデートもリリースされました。ユーザー操作を必要とする API には、拡張機能サービス ワーカーの「強力な」キープアライブがあります(つまり、ワーカーがこのタスクに 5 分を超える時間を費やすことを許可します)。
permissions.request()
desktopCapture.chooseDesktopMedia()
identity.launchWebAuthFlow()
management.uninstall()
バックグラウンドでの音声と動画の録画
Manifest V2 と Manifest V3 の間のもう 1 つのギャップが解消されました。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 の機能の差を埋めるという目標に向けて、引き続き進展を遂げています。現在のステータスについては、既知の問題のページをご覧ください。