Gebeurtenissen bij servicemedewerkers

Extensieservicemedewerkers ondersteunen zowel standaardservicemedewerkergebeurtenissen als veel gebeurtenissen in de extensie-API's . In dit gedeelte wordt beschreven wat er beschikbaar is en vindt u tips voor het gebruik ervan.

Extensiegebeurtenissen declareren

Gebeurtenishandlers in servicewerknemers moeten worden gedeclareerd in het globale bereik, wat betekent dat ze zich op het hoogste niveau van het script moeten bevinden en niet in functies moeten worden genest. Dit zorgt ervoor dat ze synchroon worden geregistreerd bij de eerste uitvoering van het script, waardoor Chrome gebeurtenissen naar de servicemedewerker kan verzenden zodra deze wordt gestart. Bijvoorbeeld:

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

Beter
chrome.action.onClicked.addListener(handleActionClick);

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

Veelvoorkomende evenementen

Extensieservicemedewerkers ondersteunen gebeurtenissen in specifieke API's. In wat volgt worden enkele veel voorkomende beschreven. Houd er rekening mee dat voor sommige van deze API's toestemming nodig is om te gebruiken, terwijl andere mogelijk gebeurtenissen, methoden of eigenschappen hebben die niet in alle versies van Chrome beschikbaar zijn. Zie de gekoppelde API-documentatie voor meer informatie, met name de gebeurtenissen, methoden of eigenschappen die u wilt gebruiken.

chrome.action
Wordt geactiveerd als reactie op een gebruikersinteractie met het werkbalkpictogram van uw extensie, ongeacht of deze actie voor een specifieke pagina (tabblad) of voor de hele extensie geldt.
chrome.management
Biedt gebeurtenissen met betrekking tot de installatie, verwijdering, in- en uitschakelen van extensies.
chrome.notifications
Biedt gebeurtenissen die verband houden met de interactie van de gebruiker met systeemmeldingen die door de extensie worden gegenereerd.
chrome.permissions
Geeft aan wanneer extensiemachtigingen door de gebruiker worden verleend of ingetrokken.
chrome.runtime
Biedt gebeurtenissen met betrekking tot de levenscyclus van de extensie, berichten verzonden vanuit andere delen van de extensie en meldingen over een beschikbare extensie of Chrome-update.
chrome.storage.onChanged
Wordt geactiveerd wanneer een StorageArea object wordt gewist of wanneer de waarde van een sleutel wordt gewijzigd of ingesteld. Houd er rekening mee dat elke StorageArea instantie zijn eigen onChanged -gebeurtenis heeft.
chrome.webNavigation
Biedt informatie over de status van navigatieverzoeken tijdens de vlucht.

Filters

Als u gebeurtenissen wilt beperken tot een specifieke gebruikssituatie, of onnodige gebeurtenisoproepen wilt elimineren, gebruikt u API's die gebeurtenisfilters ondersteunen. Denk bijvoorbeeld aan een extensie die luistert naar de gebeurtenis tabs.onUpdated om te detecteren wanneer een gebruiker naar een specifieke website navigeert. Deze gebeurtenis wordt bij elke navigatie op elk tabblad aangeroepen. Gebruik in plaats daarvan webNavigation.onCompleted met een filter. Bijvoorbeeld:

const filter = {
  url: [
    {
      urlMatches: 'https://www.google.com/',
    },
  ],
};

chrome.webNavigation.onCompleted.addListener(() => {
  console.info("The user has loaded my favorite website!");
}, filter);

Webservicewerknemergebeurtenissen

Extensieservicemedewerkers ondersteunen meer dan de elders beschreven levenscyclusgebeurtenissen.

ServiceWorkerGlobal.fetch

Wordt geactiveerd wanneer er iets wordt opgehaald uit het extensiepakket of wanneer fetch() en XMLHttpRequest() worden aangeroepen vanuit een extensie of pop-upscript. (Oproepen van inhoudsscripts worden niet onderschept door de fetch van de servicemedewerker.) In de laatste gevallen moet u de URL's van de pagina's die u wilt ophalen toevoegen aan de sleutel "host_permissions" in manifest.json .

ServiceWorkerGlobal.bericht

Het doorgeven van berichten door servicemedewerkers is beschikbaar naast het doorgeven van extensieberichten, maar de twee systemen zijn niet interoperabel. Dat betekent dat berichten die worden verzonden met sendMessage() (beschikbaar via verschillende extensie-API's) niet worden onderschept door berichthandlers van servicemedewerkers. Op dezelfde manier worden berichten die worden verzonden met postMessage() niet onderschept door berichthandlers van de extensie. Beide typen berichthandlers (zowel ServiceWorkerGlobal.message als chrome.runtime.onMessage ) worden ondersteund in extensieservicewerknemers.

U geeft de voorkeur aan extensieberichten, tenzij u een specifieke reden heeft om berichten voor servicemedewerkers te gebruiken.