Chrome 116 がベータ版でリリースされました。Chrome 拡張機能のデベロッパー向けの多くのエキサイティングなアップデートが含まれています。新機能を見てみましょう。
プログラムでサイドパネルを開く
サイドパネルは Chrome 拡張機能で最も要望の多かった機能の 1 つで、Chrome バージョン 114 以降で利用できます。サイドパネル API をリリースした後、デベロッパーから寄せられたフィードバックの 1 つに、サイドパネルをプログラムで開く方法が欲しいというものがありました。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 がアクティブである限り、サービス ワーカーは存続します。
これを使用して、サーバーからのメッセージを待っている間、サービス ワーカーがアクティブな状態を維持するキープアライブ メカニズムを実装できます。次のメッセージが届くまでに 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.
2
0 * 1000
);
}
詳しくは、新しい WebSocket のガイドとサンプルをご覧ください。
Service Worker の強力なキープアライブ
サービス ワーカーのライフサイクルについて言えば、もう 1 つ重要なアップデートがあります。ユーザー操作を必要とする API の強力なキープアライブです。ユーザー操作を必要とする API は、拡張機能サービス ワーカーの「強い」キープアライブを持ちます(つまり、ワーカーがこのタスクに 5 分以上かかることを許可します)。
permissions.request()
desktopCapture.chooseDesktopMedia()
identity.launchWebAuthFlow()
management.uninstall()
バックグラウンドでの音声と動画の録画
Manifest V2 と Manifest V3 のもう 1 つのギャップが解消されました。tabCapture
と画面外ドキュメントを使用して、バックグラウンドで音声と動画を録画できるようになりました。サービス ワーカーで chrome.tabCapture
API を使用して、ユーザー操作の後にストリーム ID を取得します。この ID をオフスクリーン ドキュメントに渡して、録画を開始できます。
動作の仕組みについては、更新された tabCapture
ガイドをご覧ください。動作例については、タブ キャプチャ - レコーダーのサンプルをご覧ください。
新しい API: runtime.getContexts()
新しい runtime.getContexts()
API を使用すると、拡張機能に関連付けられているアクティブなコンテキストに関する情報を取得できます。たとえば、アクティブなオフスクリーン ドキュメントがあるかどうかを確認するために使用できます。
const existingContexts = await chrome.runtime.getContexts({});
const offscreenDocument = existingContexts.find(
(c) => c.contextType === 'OFFSCREEN_DOCUMENT
9;
);
新しいオフスクリーン理由: GEOLOCATION
geolocation
が、オフスクリーン ドキュメントを使用するもう 1 つの有効な理由として追加されました。Offscreen API を使用して拡張機能の地理的位置を取得する方法について詳しくは、位置情報を使用するガイドをご覧ください。
chrome.action.setBadgeText()
action.setBadgeText
が更新され、Manifest V2 と Manifest V3 の間の不整合が解消されました。action.setBadgeText
に空の文字列または null
を渡すと、指定したタブのバッジ テキストがクリアされ、代わりにデフォルトのグローバル バッジ テキストが使用されます。
action.setBadgeText({tabId: tabId, text: '
39;});
概要: Manifest V3 へのもう 1 つのステップ
Service Worker のライフタイム サポートの改善と TabCapture API の更新により、Manifest V2 と V3 の機能差を解消するという目標に向けて、引き続き進歩を続けています。現在のステータスについては、既知の問題のページをご覧ください。