説明
chrome.sidePanel API を使用して、ウェブページのメイン コンテンツとともにブラウザのサイドパネルでコンテンツをホストします。
権限
sidePanelSide Panel API を使用するには、拡張機能のマニフェスト ファイルに "sidePanel" 権限を追加します。
manifest.json:
{
"name": "My side panel extension",
...
"permissions": [
"sidePanel"
]
}
対象
コンセプトと使用方法
Side Panel API を使用すると、拡張機能はサイドパネルに独自の UI を表示し、ユーザーのブラウジングを補完する永続的なエクスペリエンスを実現できます。
主な機能は次のとおりです。
- タブを切り替えても、サイドパネルは開いたままになります(そのように設定されている場合)。
- 特定のウェブサイトでのみ利用可能。
- 拡張機能ページとして、サイドパネルはすべての Chrome API にアクセスできます。
- ユーザーは、Chrome の設定でパネルを表示する側を指定できます。
ユースケース
以降のセクションでは、Side Panel API の一般的なユースケースをいくつか紹介します。拡張機能の完全な例については、拡張機能のサンプルをご覧ください。
すべてのサイトで同じサイドパネルを表示する
サイドパネルは、マニフェストの "side_panel" キーの "default_path" プロパティから最初に設定して、すべてのサイトで同じサイドパネルを表示できます。これは、拡張機能ディレクトリ内の相対パスを指している必要があります。
manifest.json:
{
"name": "My side panel extension",
...
"side_panel": {
"default_path": "sidepanel.html"
}
...
}
sidepanel.html:
<!DOCTYPE html>
<html>
<head>
<title>My Sidepanel</title>
</head>
<body>
<h1>All sites sidepanel extension</h1>
<p>This side panel is enabled on all sites</p>
</body>
</html>
特定のサイトでサイドパネルを有効にする
拡張機能は、sidepanel.setOptions() を使用して、特定のタブでサイドパネルを有効にできます。この例では、browser.tabs.onUpdated() を使用して、タブに加えられた更新をリッスンします。URL が www.google.com であるかどうかを確認し、サイドパネルを有効にします。それ以外の場合は無効にします。
service-worker.js:
const GOOGLE_ORIGIN = 'https://www.google.com';
browser.tabs.onUpdated.addListener(async (tabId, info, tab) => {
if (!tab.url) return;
const url = new URL(tab.url);
// Enables the side panel on google.com
if (url.origin === GOOGLE_ORIGIN) {
await browser.sidePanel.setOptions({
tabId,
path: 'sidepanel.html',
enabled: true
});
} else {
// Disables the side panel on all other sites
await browser.sidePanel.setOptions({
tabId,
enabled: false
});
}
});
サイドパネルが有効になっていないタブに一時的に切り替えると、サイドパネルは非表示になります。ユーザーが以前に開いていたタブに切り替えると、自動的に再度表示されます。
ユーザーがサイドパネルが有効になっていないサイトに移動すると、サイドパネルが閉じ、拡張機能はサイドパネルのプルダウン メニューに表示されなくなります。
完全な例については、タブ固有のサイドパネルのサンプルをご覧ください。
ツールバー アイコンをクリックしてサイドパネルを開く
デベロッパーは、sidePanel.setPanelBehavior() を使用して、ユーザーがアクション ツールバー アイコンをクリックしたときにサイドパネルを開くように設定できます。まず、マニフェストで "action" キーを宣言します。
manifest.json:
{
"name": "My side panel extension",
...
"action": {
"default_title": "Click to open panel"
},
...
}
ここで、前の例に次のコードを追加します。
service-worker.js:
const GOOGLE_ORIGIN = 'https://www.google.com';
// Allows users to open the side panel by clicking on the action toolbar icon
browser.sidePanel
.setPanelBehavior({ openPanelOnActionClick: true })
.catch((error) => console.error(error));
...
ユーザー操作時にプログラムでサイドパネルを開く
Chrome 116 では、sidePanel.open() が導入されます。これにより、拡張機能は、アクション アイコンのクリックなどの拡張機能のユーザー ジェスチャーによってサイドパネルを開くことができます。または、ボタンのクリックなど、拡張機能ページまたはコンテンツ スクリプトでのユーザー操作。完全なデモについては、Open Side Panel サンプル拡張機能をご覧ください。
次のコードは、ユーザーがコンテキスト メニューをクリックしたときに、現在のウィンドウでグローバル サイドパネルを開く方法を示しています。sidePanel.open() を使用する場合は、開くコンテキストを選択する必要があります。windowId を使用して、グローバル サイドパネルを開きます。または、tabId を設定して、特定のタブでのみサイドパネルを開くようにします。
service-worker.js:
browser.runtime.onInstalled.addListener(() => {
browser.contextMenus.create({
id: 'openSidePanel',
title: 'Open side panel',
contexts: ['all']
});
});
browser.contextMenus.onClicked.addListener((info, tab) => {
if (info.menuItemId === 'openSidePanel') {
// This will open the panel in all the pages on the current window.
browser.sidePanel.open({ windowId: tab.windowId });
}
});
別のパネルに切り替える
拡張機能は、sidepanel.getOptions() を使用して現在のサイドパネルを取得できます。次の例では、runtime.onInstalled() にウェルカム サイドパネルを設定しています。ユーザーが別のタブに移動すると、メインのサイドパネルに置き換えられます。
service-worker.js:
const welcomePage = 'sidepanels/welcome-sp.html';
const mainPage = 'sidepanels/main-sp.html';
browser.runtime.onInstalled.addListener(() => {
browser.sidePanel.setOptions({ path: welcomePage });
browser.sidePanel.setPanelBehavior({ openPanelOnActionClick: true });
});
browser.tabs.onActivated.addListener(async ({ tabId }) => {
const { path } = await browser.sidePanel.getOptions({ tabId });
if (path === welcomePage) {
browser.sidePanel.setOptions({ path: mainPage });
}
});
完全なコードについては、複数のサイドパネルのサンプルをご覧ください。
サイドパネルのユーザー エクスペリエンス
ユーザーには、まず Chrome の組み込みサイドパネルが表示されます。各サイドパネルには、サイドパネル メニューに拡張機能のアイコンが表示されます。アイコンが含まれていない場合は、拡張機能の名前の最初の文字を含むプレースホルダ アイコンが表示されます。
サイドパネルを開く
ユーザーがサイドパネルを開けるようにするには、アクション アイコンと sidePanel.setPanelBehavior() を組み合わせて使用します。または、次のようなユーザー操作の後に sidePanel.open() を呼び出します。
- アクション クリック
- キーボード ショートカット
- コンテキスト メニュー
- 拡張機能ページまたはコンテンツ スクリプトでのユーザー ジェスチャー。
サイドパネルを固定する
サイドパネルが開いているときに、サイドパネル ツールバーに固定アイコンが表示されます。アイコンをクリックすると、拡張機能のアクション アイコンが固定されます。固定されたアクション アイコンをクリックすると、アクション アイコンのデフォルトのアクションが実行されます。サイドパネルが開くのは、明示的に構成されている場合のみです。
例
Side Panel API 拡張機能のその他のデモについては、次の拡張機能をご覧ください。
型
CloseOptions
プロパティ
-
tabId
number 省略可
サイドパネルを閉じるタブ。指定したタブでタブ固有のサイドパネルが開いている場合、そのタブのサイドパネルは閉じられます。グローバル サイドパネルのみが開いている場合、
close()の呼び出しによって返される Promise はエラーで拒否されます。この動作は Chrome 145 で変更されました。以前のバージョンでは、グローバル パネルを閉じる動作にフォールバックします。これまたはwindowIdのうち少なくとも 1 つを指定する必要があります。 -
windowId
number 省略可
サイドパネルを閉じるウィンドウ。指定したウィンドウでグローバル サイドパネルが開いている場合、タブ固有のパネルがアクティブになっていないそのウィンドウのすべてのタブで、グローバル サイドパネルが閉じられます。これまたは
tabIdのうち少なくとも 1 つを指定する必要があります。
GetPanelOptions
プロパティ
-
tabId
number 省略可
指定すると、指定したタブのサイドパネル オプションが返されます。それ以外の場合は、デフォルトのサイドパネル オプション(特定の設定がないタブに使用)を返します。
OpenOptions
プロパティ
-
tabId
number 省略可
サイドパネルを開くタブ。対応するタブにタブ固有のサイドパネルがある場合、そのパネルはそのタブでのみ開きます。タブ固有のパネルがない場合、グローバル パネルは、指定されたタブと、現在開いているタブ固有のパネルがない他のタブで開きます。これにより、対応するタブで現在アクティブなサイドパネル(グローバルまたはタブ固有)がオーバーライドされます。これまたは
windowIdのうち少なくとも 1 つを指定する必要があります。 -
windowId
number 省略可
サイドパネルを開くウィンドウ。これは、拡張機能にグローバル(タブ固有ではない)サイドパネルがある場合、または
tabIdも指定されている場合にのみ適用されます。これにより、ユーザーが指定されたウィンドウで開いている、現在アクティブなグローバル サイドパネルがオーバーライドされます。これまたはtabIdのうち少なくとも 1 つを指定する必要があります。
PanelBehavior
プロパティ
-
openPanelOnActionClick
boolean 省略可
拡張機能のアイコンをクリックすると、サイドパネルに拡張機能のエントリが表示されるかどうかを切り替えます。デフォルトは false です。
PanelClosedInfo
プロパティ
-
パス
文字列
拡張機能パッケージ内のローカル リソースのパス。このリソースのコンテンツがパネルに表示されます。
-
tabId
number 省略可
サイドパネルが閉じられたタブの ID(省略可)。これは、パネルがタブ固有の場合にのみ提供されます。
-
windowId
数値
サイドパネルが閉じられたウィンドウの ID。これは、グローバル パネルとタブ固有のパネルの両方で使用できます。
PanelLayout
プロパティ
-
side
PanelOpenedInfo
プロパティ
-
パス
文字列
拡張機能パッケージ内のローカル リソースのパス。このリソースのコンテンツがパネルに表示されます。
-
tabId
number 省略可
サイドパネルが開いているタブの ID(省略可)。これは、パネルがタブ固有の場合にのみ提供されます。
-
windowId
数値
サイドパネルが開いているウィンドウの ID。これは、グローバル パネルとタブ固有のパネルの両方で使用できます。
PanelOptions
プロパティ
-
有効
boolean 省略可
サイドパネルを有効にするかどうか。PIN の作成は省略することもできます。デフォルト値は true です。
-
パス
文字列 省略可
使用するサイドパネルの HTML ファイルのパス。これは、拡張機能パッケージ内のローカル リソースである必要があります。
-
tabId
number 省略可
指定した場合、サイドパネルのオプションはこの ID のタブにのみ適用されます。省略した場合、これらのオプションはデフォルトの動作を設定します(特定の設定がないタブに使用されます)。注: この tabId とデフォルトの tabId に同じパスが設定されている場合、この tabId のパネルはデフォルトの tabId のパネルとは異なるインスタンスになります。
Side
ブラウザ UI のサイドパネルの配置を定義します。
列挙型
"left"
"right"
SidePanel
プロパティ
-
default_path
文字列
サイドパネルの表示用にデベロッパーが指定したパス。
メソッド
close()
browser.sidePanel.close(
options: CloseOptions,
): Promise<void>
拡張機能のサイドパネルを閉じます。パネルがすでに閉じている場合、これは何もしません。
パラメータ
-
オプション
サイドパネルを閉じるコンテキストを指定します。
戻り値
-
Promise<void>
サイドパネルが閉じられたときに解決される Promise を返します。
getLayout()
browser.sidePanel.getLayout(): Promise<PanelLayout>
サイドパネルの現在のレイアウトを返します。
戻り値
-
Promise<PanelLayout>
PanelLayoutで解決される Promise を返します。
getOptions()
browser.sidePanel.getOptions(
options: GetPanelOptions,
): Promise<PanelOptions>
アクティブなパネル構成を返します。
パラメータ
-
オプション
構成を返すコンテキストを指定します。
戻り値
-
Promise<PanelOptions>
アクティブなパネル構成で解決される Promise を返します。
getPanelBehavior()
browser.sidePanel.getPanelBehavior(): Promise<PanelBehavior>
拡張機能の現在のサイドパネルの動作を返します。
戻り値
-
Promise<PanelBehavior>
拡張機能のサイドパネルの動作で解決される Promise を返します。
open()
browser.sidePanel.open(
options: OpenOptions,
): Promise<void>
拡張機能のサイドパネルを開きます。これは、ユーザー操作に応じてのみ呼び出すことができます。
パラメータ
-
オプション
サイドパネルを開くコンテキストを指定します。
戻り値
-
Promise<void>
サイドパネルが開いたときに解決される Promise を返します。
パラメータ
-
オプション
パネルに適用する構成オプション。
戻り値
-
Promise<void>
オプションが設定されると解決される Promise を返します。
setPanelBehavior()
browser.sidePanel.setPanelBehavior(
behavior: PanelBehavior,
): Promise<void>
拡張機能のサイドパネルの動作を構成します。これは upsert オペレーションです。
パラメータ
-
設定する新しい動作。
戻り値
-
Promise<void>
新しい動作が設定されると解決される Promise を返します。
イベント
onClosed
browser.sidePanel.onClosed.addListener(
callback: function,
)
拡張機能のサイドパネルが閉じられたときに呼び出されます。
パラメータ
-
callback
関数
callbackパラメータは次のようになります。(info: PanelClosedInfo) => void
onOpened
browser.sidePanel.onOpened.addListener(
callback: function,
)
拡張機能のサイドパネルが開いたときに呼び出されます。
パラメータ
-
callback
関数
callbackパラメータは次のようになります。(info: PanelOpenedInfo) => void