Extensieservicemedewerkers reageren zowel op standaard serviceworker-gebeurtenissen als op gebeurtenissen in extensie-namespaces. Ze worden samen weergegeven omdat het ene type vaak op het andere volgt tijdens het gebruik van een extensie.
Installatie
Installatie vindt plaats wanneer de gebruiker een service worker installeert of bijwerkt vanuit de Chrome Web Store, of wanneer ze een uitgepakte extensie laden of bijwerken via de pagina chrome://extensions . Drie gebeurtenissen vinden plaats, in deze volgorde:
-
install(service worker-gebeurtenis) -
chrome.runtime.onInstalled(extensie-gebeurtenis) -
activate(service worker-gebeurtenis)
ServiceWorkerRegistration.install
De eerste gebeurtenis die tijdens de installatie wordt geactiveerd, is de installatiegebeurtenis van een webserviceworker.
chrome.runtime.onInstalled
Vervolgens is er de onInstalled gebeurtenis van de extensie, die wordt geactiveerd wanneer de extensie (niet de service worker) voor het eerst wordt geïnstalleerd, wanneer de extensie wordt bijgewerkt naar een nieuwe versie en wanneer Chrome wordt bijgewerkt naar een nieuwe versie. Gebruik deze gebeurtenis om een status in te stellen of voor eenmalige initialisatie, zoals een contextmenu .
chrome.runtime.onInstalled.addListener((details) => {
if(details.reason !== "install" && details.reason !== "update") return;
chrome.contextMenus.create({
"id": "sampleContextMenu",
"title": "Sample Context Menu",
"contexts": ["selection"]
});
});
ServiceWorkerRegistration.active
Tot slot wordt de activate- gebeurtenis van de service worker geactiveerd. Merk op dat, in tegenstelling tot webservice workers, deze gebeurtenis direct na de installatie van een extensie wordt geactiveerd, omdat er in een extensie niets vergelijkbaars is met het herladen van een pagina.
Uitbreiding start-up
Wanneer een gebruikersprofiel start, wordt de gebeurtenis chrome.runtime.onStartup geactiveerd, maar er worden geen service worker-gebeurtenissen aangeroepen.
Inactief en uitschakelen
Normaal gesproken beëindigt Chrome een service worker wanneer aan een van de volgende voorwaarden wordt voldaan:
- Na 30 seconden inactiviteit wordt deze timer gereset. Het ontvangen van een gebeurtenis of het aanroepen van een extensie-API reset deze timer.
- Wanneer een enkel verzoek, zoals een evenement of een API-aanroep, langer dan 5 minuten duurt om te verwerken.
- Wanneer het langer dan 30 seconden duurt voordat een
fetch()-reactie arriveert.
Gebeurtenissen en aanroepen naar extensie-API's resetten deze timers, en als de service worker inactief is geworden, zal een binnenkomende gebeurtenis ze weer activeren. Desondanks is het raadzaam uw service worker zo te ontwerpen dat deze bestand is tegen onverwachte beëindiging.
Om het resourceverbruik van uw extensie te optimaliseren, kunt u het beste voorkomen dat uw service worker oneindig lang actief blijft. Test uw extensies om er zeker van te zijn dat u dit niet onbedoeld doet.
Bewaar gegevens in plaats van globale variabelen te gebruiken.
Alle globale variabelen die u instelt, gaan verloren als de service worker wordt afgesloten. In plaats van globale variabelen te gebruiken, kunt u waarden opslaan in de opslag. Uw opties worden hieronder weergegeven.
- chrome.storage API
- Een extensie-API die meerdere opslagtypen biedt: lokaal, sessie, beheerd (domein) en synchroon. Deze API slaat JSON-objecten op die worden geïdentificeerd en opgehaald met door de ontwikkelaar gedefinieerde sleutels. Dit type opslag wordt niet verwijderd wanneer een gebruiker de webcache wist.
- IndexedDB API
- Een API op laag niveau voor client-side opslag van gestructureerde data, waaronder bestanden en blobs. Deze API biedt basisfunctionaliteit voor het creëren van transactionele dataopslag en -opvraging. Hoewel deze API vaak te complex is voor sommige toepassingen, zijn er diverse opslagoplossingen van derden op gebouwd.
- CacheStorage API
- Een persistent opslagmechanisme voor Request- en Response-objectparen. Deze API is specifiek ontworpen voor webserviceworkers en wordt gebruikt om gegevens van een endpoint op te halen. Er zijn verschillende manieren om deze API te gebruiken, afhankelijk van of en hoe belangrijk het is dat gebruikers actuele gegevens zien. Zie The Offline Cookbook voor meer informatie. Tenzij u specifiek netwerkverzoeken proxy't met behulp van de fetch-handler, dient u
chrome.storagete gebruiken.
Kies een minimale Chrome-versie
Sinds de release van Manifest V3 hebben we verschillende verbeteringen aangebracht aan de levensduur van service workers. Dit betekent dat als uw Manifest V3-extensie oudere versies van Chrome ondersteunt, u rekening moet houden met een aantal voorwaarden. Als deze voorwaarden geen invloed hebben op uw extensie, kunt u dit gedeelte overslaan. Als ze wel van invloed zijn, kunt u overwegen een minimale Chrome-versie in uw manifest op te geven.
Chrome 120
Alarmen kunnen nu worden ingesteld op een minimale periode van 30 seconden, afgestemd op de levenscyclus van de service worker. Zie chrome.alarms voor meer informatie.
Chrome 118
Actieve debugsessies die zijn aangemaakt met de chrome.debugger API houden de service worker nu actief. Dit voorkomt dat service workers een time-out krijgen tijdens aanroepen van deze API.
Chrome 116
Chrome 116 introduceerde de volgende verbeteringen met betrekking tot de levensduur van service workers:
Actieve
WebSocket-verbindingen verlengen nu de levensduur van de service worker van de extensie. Het verzenden of ontvangen van berichten via eenWebSocketin een service worker van een extensie reset de inactiviteitstimer van de service worker.Aanvullende API's voor extensies mogen de time-outperiode van vijf minuten voor serviceworkers van extensies overschrijden. Deze API's tonen een gebruikersprompt en kunnen daarom redelijkerwijs langer dan vijf minuten nodig hebben om te worden afgehandeld. Voorbeelden hiervan zijn
desktopCapture.chooseDesktopMedia(),identity.launchWebAuthFlow(),management.uninstall()enpermissions.request().
Chrome 114
Het verzenden van een bericht met een lange berichtcyclus houdt de service worker actief. Het openen van een poort reset de timers niet langer.
Chrome 110
Aanroepen van de Extension API resetten de timers. Voorheen zorgden alleen actieve eventhandlers ervoor dat een service worker actief bleef. Gebeurtenissen die in de wachtrij stonden, maar waarvoor nog geen handler was aangeroepen, zorgden niet voor een reset.
Chrome 109
Berichten die vanuit een extern document worden verzonden, resetten de timers.
Chrome 105
Verbinding maken met een native berichtenhost met behulp van chrome.runtime.connectNative() zorgt ervoor dat een service worker actief blijft. Als het hostproces crasht of wordt afgesloten, wordt de poort gesloten en zal de service worker na het verstrijken van de timers worden beëindigd. Voorkom dit door chrome.runtime.connectNative() aan te roepen in de `onDisconnect`-gebeurtenishandler van de poort.