Ereignisse in Service Workern

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:

Keine Empfehlung
chrome.storage.local.get(["badgeText"], ({ badgeText }) => {
  chrome.action.setBadgeText({ text: badgeText });
  chrome.action.onClicked.addListener(handleActionClick);
});

Bessere
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. Jede StorageArea-Instanz hat ein eigenes onChanged-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.