Erweiterungs-Dienstworker unterstützen sowohl Standard-Dienstworker-Ereignisse als auch viele Ereignisse in den Erweiterungs-APIs. In diesem Abschnitt werden die verfügbaren Optionen beschrieben und es werden Tipps zur Verwendung gegeben.
Erweiterungsereignisse deklarieren
Ereignishandler in Service Workern müssen im globalen Gültigkeitsbereich deklariert werden. Das bedeutet, dass sie sich auf der obersten Ebene des Scripts befinden und nicht in Funktionen verschachtelt sein dürfen. So werden sie bei der ersten Scriptausführung synchron registriert, sodass Chrome Ereignisse direkt nach dem Start an den Service Worker senden kann. 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
Erweiterungs-Service-Worker unterstützen Ereignisse in bestimmten APIs. Im Folgenden werden einige gängige Beispiele beschrieben. Für einige dieser APIs sind Berechtigungen erforderlich. Andere APIs haben möglicherweise Ereignisse, Methoden oder Properties, die nicht in allen Chrome-Versionen verfügbar sind. Weitere Informationen finden Sie in der verlinkten API-Dokumentation, insbesondere zu den Ereignissen, Methoden oder Eigenschaften, die Sie verwenden möchten.
chrome.action
- Wird ausgelöst, wenn ein Nutzer mit dem Symbol in der Symbolleiste Ihrer Erweiterung interagiert, unabhängig davon, ob die Aktion für eine bestimmte Seite (einen bestimmten Tab) oder für die gesamte Erweiterung gilt.
chrome.management
- Ereignisse im Zusammenhang mit der Installation, Deinstallation, Aktivierung und Deaktivierung von Erweiterungen.
chrome.notifications
- Ereignisse im Zusammenhang mit der Interaktion des Nutzers mit Systembenachrichtigungen, die von der Erweiterung generiert wurden.
chrome.permissions
- Gibt an, wann Erweiterungsberechtigungen vom Nutzer gewährt oder widerrufen wurden.
chrome.runtime
- Bietet Ereignisse im Zusammenhang mit dem Lebenszyklus der Erweiterung, Nachrichten, die von anderen Teilen der Erweiterung gesendet werden, und Benachrichtigungen zu verfügbaren Erweiterungen oder Chrome-Updates.
chrome.storage.onChanged
- Wird ausgelöst, wenn ein
StorageArea
-Objekt gelöscht oder der Wert eines Schlüssels geändert oder festgelegt wird. Beachten Sie, dass jedeStorageArea
-Instanz ein eigenesonChanged
-Ereignis hat. chrome.webNavigation
- Stellt Informationen zum Status von Navigationsanfragen während der Fahrt bereit.
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 überwacht 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-Dienst-Worker-Ereignisse
Erweiterungs-Dienstworker unterstützen mehr als die anderswo beschriebenen Lebenszyklusereignisse.
ServiceWorkerGlobal.fetch
Wird ausgelöst, wenn etwas aus dem Erweiterungspaket abgerufen wird oder fetch()
und XMLHttpRequest()
aus einem Erweiterungs- oder Pop-up-Script aufgerufen werden. (Anrufe von Inhaltsscripts werden vom fetch
-Handler des Dienst-Workers nicht abgefangen.) In diesen Fällen müssen Sie die URLs der Seiten, die Sie abrufen möchten, dem Schlüssel "host_permissions"
in manifest.json
hinzufügen.
ServiceWorkerGlobal.message
Die Service Worker-Nachrichtenweitergabe ist zusätzlich zur Nachrichtenweitergabe der Erweiterung verfügbar. Die beiden Systeme sind jedoch nicht kompatibel. Das bedeutet, dass Nachrichten, die mit sendMessage()
gesendet werden (das über mehrere Erweiterungs-APIs verfügbar ist), nicht von Service Worker-Nachrichten-Handlern abgefangen werden. Ebenso werden Nachrichten, die mit postMessage()
gesendet werden, nicht von Erweiterungsnachrichten-Handlern abgefangen. Beide Arten von Nachrichten-Handlern, also sowohl ServiceWorkerGlobal.message
als auch chrome.runtime.onMessage
, werden in Erweiterungs-Dienst-Workern unterstützt.
Sie sollten Erweiterungsnachrichten bevorzugen, es sei denn, Sie haben einen bestimmten Grund, Dienstmitarbeiternachrichten zu verwenden.