Beschreibung
Mit der chrome.sidePanel API können Sie Inhalte in der Seitenleiste des Browsers neben dem Hauptinhalt einer Webseite hosten.
Berechtigungen
sidePanelWenn Sie die Side Panel API verwenden möchten, fügen Sie die Berechtigung "sidePanel" in der Manifestdatei der Erweiterung hinzu:
manifest.json:
{
"name": "My side panel extension",
...
"permissions": [
"sidePanel"
]
}
Verfügbarkeit
Konzepte und Verwendung
Mit der Side Panel API können Erweiterungen ihre eigene Benutzeroberfläche in der Seitenleiste anzeigen. So können sie dauerhafte Funktionen bereitstellen, die das Surfen im Web ergänzen.
Zu den Funktionen gehören:
- Die Seitenleiste bleibt beim Wechseln zwischen Tabs geöffnet, wenn dies so eingestellt ist.
- Sie ist möglicherweise nur auf bestimmten Websites verfügbar.
- Als Erweiterungsseite haben Seitenleisten Zugriff auf alle Chrome APIs.
- In den Chrome-Einstellungen können Nutzer festlegen, auf welcher Seite die Seitenleiste angezeigt werden soll.
Anwendungsfälle
In den folgenden Abschnitten werden einige gängige Anwendungsfälle für die Side Panel API beschrieben. Vollständige Beispiele für Erweiterungen finden Sie unter Beispiele für Erweiterungen.
Auf jeder Website dieselbe Seitenleiste anzeigen
Die Seitenleiste kann anfänglich über die Property "default_path" im Schlüssel "side_panel" des Manifests festgelegt werden, damit auf jeder Website dieselbe Seitenleiste angezeigt wird. Dieser sollte auf einen relativen Pfad im Erweiterungsverzeichnis verweisen.
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>
Seitenleiste auf einer bestimmten Website aktivieren
Eine Erweiterung kann sidepanel.setOptions() verwenden, um eine Seitenleiste auf einem bestimmten Tab zu aktivieren. In diesem Beispiel wird browser.tabs.onUpdated() verwendet, um auf Aktualisierungen des Tabs zu warten. Sie prüft, ob die URL www.google.com lautet, und aktiviert die Seitenleiste. Andernfalls wird sie deaktiviert.
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
});
}
});
Wenn ein Nutzer vorübergehend zu einem Tab wechselt, in dem die Seitenleiste nicht aktiviert ist, wird sie ausgeblendet. Sie wird automatisch wieder angezeigt, wenn der Nutzer zu einem Tab wechselt, in dem sie zuvor geöffnet war.
Wenn der Nutzer eine Website aufruft, auf der die Seitenleiste nicht aktiviert ist, wird die Seitenleiste geschlossen und die Erweiterung wird nicht im Drop-down-Menü der Seitenleiste angezeigt.
Ein vollständiges Beispiel finden Sie im Beispiel Tabspezifische Seitenleiste.
Seitenleiste durch Klicken auf das Symbol in der Symbolleiste öffnen
Entwickler können Nutzern erlauben, die Seitenleiste zu öffnen, wenn sie auf das Symbol in der Aktionssymbolleiste mit sidePanel.setPanelBehavior() klicken. Deklarieren Sie zuerst den Schlüssel "action" im Manifest:
manifest.json:
{
"name": "My side panel extension",
...
"action": {
"default_title": "Click to open panel"
},
...
}
Fügen Sie nun den folgenden Code zum vorherigen Beispiel hinzu:
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));
...
Seitenleiste bei Nutzerinteraktion programmatisch öffnen
Mit Chrome 116 wird sidePanel.open() eingeführt. Damit können Erweiterungen die Seitenleiste über eine Nutzergeste der Erweiterung öffnen, z. B. durch Klicken auf das Aktionssymbol. Oder eine Nutzerinteraktion auf einer Erweiterungsseite oder in einem Inhaltsskript, z. B. das Klicken auf eine Schaltfläche. Eine vollständige Demo finden Sie in der Beispielerweiterung Seitenleiste öffnen.
Der folgende Code zeigt, wie eine globale Seitenleiste im aktuellen Fenster geöffnet wird, wenn der Nutzer auf ein Kontextmenü klickt. Wenn Sie sidePanel.open() verwenden, müssen Sie den Kontext auswählen, in dem es geöffnet werden soll. Mit windowId können Sie eine globale Seitenleiste öffnen. Alternativ können Sie tabId festlegen, damit die Seitenleiste nur auf einem bestimmten Tab geöffnet wird.
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 });
}
});
Zu einem anderen Bereich wechseln
Erweiterungen können sidepanel.getOptions() verwenden, um die aktuelle Seitenleiste abzurufen. Im folgenden Beispiel wird eine Willkommens-Seitenleiste für runtime.onInstalled() festgelegt. Wenn der Nutzer dann zu einem anderen Tab wechselt, wird die Seitenleiste durch die Hauptseitenleiste ersetzt.
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 });
}
});
Den vollständigen Code finden Sie im Beispiel Mehrere Seitenleisten.
Seitenleiste
Nutzer sehen zuerst die integrierten Seitenleisten von Chrome. In jeder Seitenleiste wird das Symbol der Erweiterung im Seitenleistenmenü angezeigt. Wenn keine Symbole enthalten sind, wird ein Platzhaltersymbol mit dem ersten Buchstaben des Namens der Erweiterung angezeigt.
Seitenleiste öffnen
Wenn Sie Nutzern das Öffnen der Seitenleiste ermöglichen möchten, verwenden Sie ein Aktionssymbol in Kombination mit sidePanel.setPanelBehavior(). Alternativ können Sie sidePanel.open() nach einer Nutzerinteraktion aufrufen, z. B.:
- Ein Aktionsklick
- Eine Tastenkombination
- Ein Kontextmenü
- Eine Nutzergeste auf einer Erweiterungsseite oder in einem Inhaltsskript.
Seitenleiste anpinnen
In der Symbolleiste der Seitenleiste wird ein Stecknadelsymbol angezeigt, wenn die Seitenleiste geöffnet ist. Wenn Sie auf das Symbol klicken, wird das Aktionssymbol Ihrer Erweiterung angepinnt. Wenn Sie auf das Aktionssymbol klicken, nachdem es angepinnt wurde, wird die Standardaktion für das Aktionssymbol ausgeführt. Die Seitenleiste wird nur geöffnet, wenn dies explizit konfiguriert wurde.
Beispiele
Weitere Demos zu Side Panel API-Erweiterungen finden Sie in den folgenden Erweiterungen:
- Seitenleiste „Wörterbuch“:
- Globale Seitenleiste.
- Mehrere Seitenleisten:
- Seitenleiste öffnen.
- Websitespezifische Seitenleiste:
Typen
CloseOptions
Attribute
-
tabId
number optional
Der Tab, in dem die Seitenleiste geschlossen werden soll. Wenn im angegebenen Tab eine tabspezifische Seitenleiste geöffnet ist, wird sie für diesen Tab geschlossen. Wenn nur die globale Seitenleiste geöffnet ist, wird das Promise, das vom Aufruf von
close()zurückgegeben wird, mit einem Fehler abgelehnt. Dieses Verhalten wurde in Chrome 145 geändert. In früheren Versionen wurde stattdessen das globale Steuerfeld geschlossen. Es muss entweder dieses Feld oderwindowIdangegeben werden. -
windowId
number optional
Das Fenster, in dem die Seitenleiste geschlossen werden soll. Wenn im angegebenen Fenster eine globale Seitenleiste geöffnet ist, wird sie für alle Tabs in diesem Fenster geschlossen, in denen keine tabspezifische Seitenleiste aktiv ist. Es muss entweder dieses Feld oder
tabIdangegeben werden.
GetPanelOptions
Attribute
-
tabId
number optional
Falls angegeben, werden die Seitenleistenoptionen für den angegebenen Tab zurückgegeben. Andernfalls werden die Standardoptionen für die Seitenleiste zurückgegeben, die für alle Tabs ohne spezifische Einstellungen verwendet werden.
OpenOptions
Attribute
-
tabId
number optional
Der Tab, in dem die Seitenleiste geöffnet werden soll. Wenn der entsprechende Tab eine tabspezifische Seitenleiste hat, wird die Seitenleiste nur für diesen Tab geöffnet. Wenn es keinen tabspezifischen Bereich gibt, wird der globale Bereich im angegebenen Tab und in allen anderen Tabs ohne aktuell geöffneten tabspezifischen Bereich geöffnet. Dadurch wird jede derzeit aktive Seitenleiste (global oder tabspezifisch) im entsprechenden Tab überschrieben. Es muss entweder dieses Feld oder
windowIdangegeben werden. -
windowId
number optional
Das Fenster, in dem die Seitenleiste geöffnet werden soll. Dies gilt nur, wenn die Erweiterung eine globale (nicht tabspezifische) Seitenleiste hat oder
tabIdebenfalls angegeben ist. Dadurch wird jede derzeit aktive globale Seitenleiste überschrieben, die der Nutzer im angegebenen Fenster geöffnet hat. Es muss entweder dieses Feld odertabIdangegeben werden.
PanelBehavior
Attribute
-
openPanelOnActionClick
Boolesch optional
Gibt an, ob durch Klicken auf das Symbol der Erweiterung der Eintrag der Erweiterung in der Seitenleiste ein- oder ausgeblendet wird. Die Standardeinstellung ist "false".
PanelClosedInfo
Attribute
-
Pfad
String
Der Pfad der lokalen Ressource im Erweiterungspaket, deren Inhalt im Steuerfeld angezeigt wird.
-
tabId
number optional
Die optionale ID des Tabs, auf dem die Seitenleiste geschlossen wurde. Dies wird nur angegeben, wenn das Steuerfeld tabspezifisch ist.
-
windowId
Zahl
Die ID des Fensters, in dem die Seitenleiste geschlossen wurde. Diese Option ist sowohl für globale als auch für tabspezifische Bereiche verfügbar.
PanelLayout
Attribute
-
side
PanelOpenedInfo
Attribute
-
Pfad
String
Der Pfad der lokalen Ressource im Erweiterungspaket, deren Inhalt im Steuerfeld angezeigt wird.
-
tabId
number optional
Die optionale ID des Tabs, auf dem die Seitenleiste geöffnet wird. Dies wird nur angegeben, wenn das Steuerfeld tabspezifisch ist.
-
windowId
Zahl
Die ID des Fensters, in dem die Seitenleiste geöffnet ist. Diese Option ist sowohl für globale als auch für tabspezifische Bereiche verfügbar.
PanelOptions
Attribute
-
aktiviert
Boolesch optional
Gibt an, ob die Seitenleiste aktiviert werden soll. Dies ist optional. Der Standardwert ist true.
-
Pfad
String optional
Der Pfad zur HTML-Datei für die Seitenleiste, die verwendet werden soll. Dies muss eine lokale Ressource im Erweiterungspaket sein.
-
tabId
number optional
Wenn angegeben, gelten die Optionen für die Seitenleiste nur für den Tab mit dieser ID. Wenn diese Optionen weggelassen werden, wird das Standardverhalten festgelegt (für alle Tabs ohne spezifische Einstellungen verwendet). Hinweis: Wenn für diese „tabId“ und die Standard-„tabId“ derselbe Pfad festgelegt ist, ist das Steuerfeld für diese „tabId“ eine andere Instanz als das Steuerfeld für die Standard-„tabId“.
Side
Definiert die mögliche Ausrichtung der Seitenleiste in der Browser-UI.
Enum
"left"
"right"
SidePanel
Attribute
-
default_path
String
Vom Entwickler angegebener Pfad für die Anzeige in der Seitenleiste.
Methoden
close()
browser.sidePanel.close(
options: CloseOptions,
): Promise<void>
Schließt die Seitenleiste der Erweiterung. Dies ist ein No-Op, wenn das Steuerfeld bereits geschlossen ist.
Parameter
-
Optionen
Gibt den Kontext an, in dem die Seitenleiste geschlossen werden soll.
Ausgabe
-
Promise<void>
Gibt ein Promise zurück, das aufgelöst wird, wenn die Seitenleiste geschlossen wurde.
getLayout()
browser.sidePanel.getLayout(): Promise<PanelLayout>
Gibt das aktuelle Layout der Seitenleiste zurück.
Ausgabe
-
Promise<PanelLayout>
Gibt ein Promise zurück, das mit einem
PanelLayoutaufgelöst wird.
getOptions()
browser.sidePanel.getOptions(
options: GetPanelOptions,
): Promise<PanelOptions>
Gibt die aktive Bereichskonfiguration zurück.
Parameter
-
Optionen
Gibt den Kontext an, für den die Konfiguration zurückgegeben werden soll.
Ausgabe
-
Promise<PanelOptions>
Gibt ein Promise zurück, das mit der aktiven Steuerfeldkonfiguration aufgelöst wird.
getPanelBehavior()
browser.sidePanel.getPanelBehavior(): Promise<PanelBehavior>
Gibt das aktuelle Verhalten der Seitenleiste der Erweiterung zurück.
Ausgabe
-
Promise<PanelBehavior>
Gibt ein Promise zurück, das mit dem Verhalten der Seitenleiste der Erweiterung aufgelöst wird.
open()
browser.sidePanel.open(
options: OpenOptions,
): Promise<void>
Öffnet die Seitenleiste für die Erweiterung. Dies darf nur als Reaktion auf eine Nutzeraktion aufgerufen werden.
Parameter
-
Optionen
Gibt den Kontext an, in dem die Seitenleiste geöffnet werden soll.
Ausgabe
-
Promise<void>
Gibt ein Promise zurück, das aufgelöst wird, wenn die Seitenleiste geöffnet wurde.
setOptions()
browser.sidePanel.setOptions(
options: PanelOptions,
): Promise<void>
Konfiguriert die Seitenleiste.
Parameter
-
Optionen
Die Konfigurationsoptionen, die auf das Steuerfeld angewendet werden sollen.
Ausgabe
-
Promise<void>
Gibt ein Promise zurück, das aufgelöst wird, wenn die Optionen festgelegt wurden.
setPanelBehavior()
browser.sidePanel.setPanelBehavior(
behavior: PanelBehavior,
): Promise<void>
Konfiguriert das Verhalten der Seitenleiste der Erweiterung. Dies ist ein Upsert-Vorgang.
Parameter
-
zum weltweiten Kundenverhalten.
Das neue Verhalten, das festgelegt werden soll.
Ausgabe
-
Promise<void>
Gibt ein Promise zurück, das aufgelöst wird, wenn das neue Verhalten festgelegt wurde.
Ereignisse
onClosed
browser.sidePanel.onClosed.addListener(
callback: function,
)
Wird ausgelöst, wenn die Seitenleiste der Erweiterung geschlossen wird.
Parameter
-
callback
Funktion
Der Parameter
callbacksieht so aus:(info: PanelClosedInfo) => void
-
Info
-
onOpened
browser.sidePanel.onOpened.addListener(
callback: function,
)
Wird ausgelöst, wenn die Seitenleiste der Erweiterung geöffnet wird.
Parameter
-
callback
Funktion
Der Parameter
callbacksieht so aus:(info: PanelOpenedInfo) => void
-
Info
-