Serviceworkers van extensies reageren zowel op de standaard service worker-gebeurtenissen als op gebeurtenissen in extensienaamruimten. Ze worden samen gepresenteerd 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 hij een uitgepakte extensie laadt of bijwerkt via de pagina chrome://extensions
. Er vinden drie gebeurtenissen plaats, in deze volgorde:
-
install
-
onInstall
-
activate
ServiceWorkerRegistration.install
De eerste gebeurtenis die tijdens de installatie wordt geactiveerd, is de installatiegebeurtenis van een webserviceworker.
chrome.runtime.onInstalled
De volgende is 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.actief
Ten slotte wordt de activeringsgebeurtenis van de service worker geactiveerd. Merk op dat deze gebeurtenis, in tegenstelling tot web service workers, direct na de installatie van een extensie wordt geactiveerd, omdat er in een extensie niets vergelijkbaars is met het herladen van een pagina.
Uitbreiding opstarten
Wanneer een gebruikersprofiel wordt gestart, wordt de gebeurtenis chrome.runtime.onStartup
geactiveerd, maar worden er geen service worker-gebeurtenissen aangeroepen.
Inactief en uitgeschakeld
Normaal gesproken beëindigt Chrome een service worker wanneer aan een van de volgende voorwaarden is voldaan:
- Na 30 seconden inactiviteit. Het ontvangen van een gebeurtenis of het aanroepen van een extensie-API reset deze timer.
- Wanneer het verwerken van één enkele aanvraag, zoals een gebeurtenis of API-aanroep, langer dan 5 minuten duurt.
- Wanneer het langer dan 30 seconden duurt voordat een
fetch()
-respons arriveert.
Gebeurtenissen en aanroepen van extensie-API's resetten deze timers. Als de service worker inactief is geworden, activeert een inkomende gebeurtenis deze. Desondanks moet u uw service worker zo ontwerpen dat deze bestand is tegen onverwachte beëindiging.
Om het resourceverbruik van je extensie te optimaliseren, kun je het beste voorkomen dat je service worker oneindig actief blijft. Test je extensies om er zeker van te zijn dat je dit niet onbedoeld doet.
Gegevens behouden 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, slaat u waarden op in de opslag. Uw opties worden weergegeven.
- chrome.storage API
- Een uitbreidings-API die meerdere soorten opslag biedt: lokaal, sessie, beheerd (domein) en synchronisatie. Deze API slaat JSON-objecten op die zijn geïdentificeerd en opgehaald met door de ontwikkelaar gedefinieerde sleutels. Dit type opslag kan niet worden verwijderd wanneer een gebruiker de webcache wist.
- IndexedDB API
- Een low-level API voor client-side opslag van gestructureerde data, inclusief bestanden en blobs. Deze API biedt primitieven voor het creëren van opslag en opvraging van transactionele data. Hoewel deze API vaak te complex is voor sommige use cases, zijn er een aantal externe opslagoplossingen op gebaseerd.
- CacheStorage API
- Een persistent opslagmechanisme voor Request- en Response-objectparen. Deze API is speciaal ontworpen voor webserviceworkers en wordt gebruikt om gegevens van een eindpunt 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 proxyt met behulp van de fetch-handler, kunt u het beste
chrome.storage
gebruiken.
Kies een minimale Chrome-versie
Sinds de release van Manifest V3 hebben we verschillende verbeteringen doorgevoerd aan de levensduur van service workers. Dit betekent dat als uw Manifest V3-extensie eerdere versies van Chrome ondersteunt, er voorwaarden zijn waar u rekening mee moet houden. Als deze voorwaarden geen invloed hebben op uw extensie, kunt u verdergaan met deze sectie. Als dit wel het geval is, overweeg dan om een minimale Chrome-versie in uw manifest op te geven.
Chroom 120
Alarmen kunnen nu worden ingesteld op een minimale periode van 30 seconden, passend bij de levenscyclus van de service worker. Zie chrome.alarms
voor meer informatie.
Chroom 118
Actieve debuggersessies die met de chrome.debugger
API zijn gemaakt, houden de service worker nu actief. Dit voorkomt dat service workers een time-out krijgen tijdens aanroepen van deze API.
Chroom 116
Chrome 116 introduceerde de volgende verbeteringen met betrekking tot de levensduur van service workers:
Actieve
WebSocket
-verbindingen verlengen nu de levensduur van extensieservicewerkers. Het verzenden of ontvangen van berichten via eenWebSocket
in een extensieservicewerker reset de inactiviteitstimer van de servicewerker.Aanvullende extensie-API's mogen de time-outperiode van vijf minuten voor extensieserviceworkers overschrijden. Deze API's geven een gebruikersprompt weer en kunnen daarom redelijkerwijs langer dan vijf minuten duren om te verwerken. Voorbeelden hiervan zijn
desktopCapture.chooseDesktopMedia()
,identity.launchWebAuthFlow()
,management.uninstall()
enpermissions.request()
.
Chroom 114
Het versturen van een bericht met een lange levensduur houdt de service worker in leven. Het openen van een poort reset de timers niet langer.
Chroom 110
Extension API-aanroepen resetten de timers. Voorheen hielden alleen actieve event handlers een service worker actief. Gebeurtenissen die in de wachtrij stonden, maar waarvoor geen handler was aangeroepen, veroorzaakten geen reset.
Chroom 109
Berichten die vanaf een document buiten beeld worden verzonden, zorgen ervoor dat de timers opnieuw worden ingesteld.
Chroom 105
Verbinding maken met een native berichtenserver via chrome.runtime.connectNative()
houdt een service worker actief. Als het hostproces crasht of wordt afgesloten, wordt de poort gesloten en wordt de service worker beëindigd nadat de timers zijn verstreken. Bescherm uzelf hiertegen door chrome.runtime.connectNative()
aan te roepen in de onDisconnect-gebeurtenishandler van de poort.