Die Service Worker der Erweiterung unterstützen sowohl Standard-Service-Worker-Ereignisse als auch viele Ereignisse in den Extension APIs. In diesem Abschnitt werden die verfügbaren Funktionen und Tipps zu deren Verwendung beschrieben.
Erweiterungsereignisse deklarieren
Event-Handler in Service Workern müssen global deklariert werden, d. h. sie sollten sich auf der obersten Ebene des Skripts befinden und nicht in Funktionen verschachtelt sein. Dadurch wird sichergestellt, dass sie bei der ersten Skriptausführung synchron registriert werden, sodass Chrome Ereignisse an den Service Worker senden kann, sobald er gestartet wird. Beispiel:
chrome.storage.local.get(["badgeText"], ({ badgeText }) => { chrome.action.setBadgeText({ text: badgeText }); chrome.action.onClicked.addListener(handleActionClick); });
chrome.action.onClicked.addListener(handleActionClick); chrome.storage.local.get(["badgeText"], ({ badgeText }) => { chrome.action.setBadgeText({ text: badgeText }); });
Häufige Ereignisse
Die Erweiterungs-Service-Worker unterstützen Ereignisse in bestimmten APIs. Im Folgenden werden einige häufige Probleme beschrieben. Beachten Sie, dass für einige dieser APIs Berechtigungen zur Verwendung erforderlich sind. Andere haben möglicherweise Ereignisse, Methoden oder Eigenschaften, die nicht in allen Chrome-Versionen verfügbar sind. Weitere Informationen finden Sie in der verknüpften API-Dokumentation, insbesondere zu den Ereignissen, Methoden oder Eigenschaften, die Sie verwenden möchten.
chrome.action
- Wird als Reaktion auf eine Nutzerinteraktion mit dem Symbol der Erweiterung in der Symbolleiste ausgelöst, unabhängig davon, ob die Aktion für eine bestimmte Seite (Tab) oder für die gesamte Erweiterung gilt
chrome.management
- Ereignisse im Zusammenhang mit der Installation, Deinstallation, Aktivierung und Deaktivierung von Erweiterungen
chrome.notifications
- Liefert Ereignisse, die sich auf die Interaktion des Nutzers mit den von der Erweiterung generierten Systembenachrichtigungen beziehen.
chrome.permissions
- Gibt an, wann der Nutzer Berechtigungen für Erweiterungen gewährt oder widerrufen kann.
chrome.runtime
- Hier finden Sie Ereignisse im Zusammenhang mit dem Lebenszyklus der Erweiterung, von anderen Teilen der Erweiterung gesendete Nachrichten und Benachrichtigungen zu verfügbaren Erweiterungen oder Chrome-Updates.
chrome.storage.onChanged
- Wird immer dann ausgelöst, wenn ein
StorageArea
-Objekt gelöscht oder der Wert eines Schlüssels geändert oder festgelegt wird. JedeStorageArea
-Instanz hat ein eigenesonChanged
-Ereignis. chrome.webNavigation
- Liefert Informationen zum Status von Navigationsanfragen im Flugzeug.
Filter
Wenn Sie Ereignisse auf einen bestimmten Anwendungsfall beschränken oder unnötige Ereignisaufrufe vermeiden möchten, verwenden Sie APIs, die Ereignisfilter unterstützen. Angenommen, eine Erweiterung wartet auf das Ereignis tabs.onUpdated
, um zu erkennen, wenn ein Nutzer eine bestimmte Website aufruft. Dieses Ereignis wird bei jeder Navigation auf jedem Tab aufgerufen. Verwenden Sie stattdessen webNavigation.onCompleted
mit einem Filter. Beispiel:
const filter = {
url: [
{
urlMatches: 'https://www.google.com/',
},
],
};
chrome.webNavigation.onCompleted.addListener(() => {
console.info("The user has loaded my favorite website!");
}, filter);
Web Service Worker-Ereignisse
Die Service Worker der Erweiterung unterstützen mehr als die Lebenszyklusereignisse, die an anderer Stelle beschrieben werden.
ServiceWorkerGlobal.fetch
Wird ausgelöst, wenn etwas aus dem Erweiterungspaket abgerufen wird oder wenn fetch()
und XMLHttpRequest()
über eine Erweiterung oder ein Pop-up-Skript aufgerufen werden. (Aufrufe von Inhaltsskripten werden vom fetch
-Handler des Service Workers nicht abgefangen.) In letzterem Fall müssen Sie die URLs der abzurufenden Seiten dem "host_permissions"
-Schlüssel im manifest.json
hinzufügen.
ServiceWorkerGlobal.message
Neben der Nachrichtenübergabe für Erweiterungen ist auch die Übergabe von Service Worker-Nachrichten verfügbar. Die beiden Systeme sind jedoch nicht interoperabel. Das bedeutet, dass Nachrichten, die mit sendMessage()
gesendet werden, das von mehreren Erweiterungs-APIs verfügbar ist, nicht von Service Worker-Nachrichten-Handlern abgefangen werden. Außerdem werden Nachrichten, die über postMessage()
gesendet werden, nicht von den Nachrichten-Handlern der Erweiterung abgefangen. Beide Arten von Nachrichten-Handlern – also sowohl ServiceWorkerGlobal.message
als auch chrome.runtime.onMessage
– werden in Erweiterungsdienst-Workern unterstützt.
Sie sollten die Messaging-Funktion für Erweiterungen bevorzugen, es sei denn, Sie haben einen bestimmten Grund für die Verwendung der Service Worker-Nachrichtenfunktion.