I service worker delle estensioni supportano sia gli eventi service worker standard sia molti eventi nelle API delle estensioni. Questa sezione descrive le opzioni disponibili e fornisce suggerimenti per utilizzarle.
Dichiarare gli eventi di estensione
I gestori di eventi nei service worker devono essere dichiarati nell'ambito globale, il che significa che devono trovarsi al primo livello dello script e non essere nidificati all'interno delle funzioni. In questo modo, la registrazione viene eseguita in modo sincrono durante l'esecuzione iniziale dello script, il che consente a Chrome di inviare eventi al service worker non appena viene avviato. Ad esempio:
browser.storage.local.get(["badgeText"], ({ badgeText }) => { browser.action.setBadgeText({ text: badgeText }); browser.action.onClicked.addListener(handleActionClick); });
browser.action.onClicked.addListener(handleActionClick); browser.storage.local.get(["badgeText"], ({ badgeText }) => { browser.action.setBadgeText({ text: badgeText }); });
Eventi comuni
I service worker delle estensioni supportano gli eventi in API specifiche. Di seguito sono descritti alcuni dei più comuni. Tieni presente che alcune di queste API richiedono autorizzazioni per l'utilizzo e altre potrebbero avere eventi, metodi o proprietà non disponibili in tutte le versioni di Chrome. Per i dettagli, consulta la documentazione dell'API collegata, in particolare gli eventi, i metodi o le proprietà che vuoi utilizzare.
browser.action- Attivato in risposta a un'interazione dell'utente con l'icona della barra degli strumenti dell'estensione, che si tratti di un'azione per una pagina (scheda) specifica o per l'intera estensione.
browser.management- Fornisce eventi relativi all'installazione, alla disinstallazione, all'attivazione e alla disattivazione delle estensioni.
browser.notifications- Fornisce eventi relativi all'interazione dell'utente con le notifiche di sistema generate dall'estensione.
browser.permissions- Indica quando le autorizzazioni dell'estensione vengono concesse o revocate dall'utente.
browser.runtime- Fornisce eventi relativi al ciclo di vita dell'estensione, messaggi inviati da altre parti dell'estensione e notifica di un aggiornamento di Chrome o di un'estensione disponibile.
browser.storage.onChanged- Attivato ogni volta che un oggetto
StorageAreaviene cancellato o quando il valore di una chiave viene modificato o impostato. Tieni presente che ogni istanza diStorageAreaha il proprio eventoonChanged. browser.webNavigation- Fornisce informazioni sullo stato delle richieste di navigazione in volo.
Filtri
Per limitare gli eventi a un caso d'uso specifico o eliminare chiamate di eventi non necessarie, utilizza API che supportano i filtri degli eventi. Ad esempio, considera un'estensione che ascolta l'evento tabs.onUpdated per rilevare quando un utente visita un sito web specifico. Questo evento verrà chiamato a ogni navigazione in ogni scheda. Utilizza invece webNavigation.onCompleted con un filtro. Ad esempio:
const filter = {
url: [
{
urlMatches: 'https://www.google.com/',
},
],
};
browser.webNavigation.onCompleted.addListener(() => {
console.info("The user has loaded my favorite website!");
}, filter);
Eventi service worker web
I service worker delle estensioni supportano più degli eventi del ciclo di vita descritti altrove.
ServiceWorkerGlobal.fetch
Attivato quando viene recuperato qualcosa dal pacchetto dell'estensione o quando fetch() e XMLHttpRequest() vengono chiamati da un'estensione o da uno script popup. Le chiamate dagli script dei contenuti non vengono intercettate dal gestore fetch del service worker. In questi ultimi casi, devi aggiungere gli URL delle pagine che vuoi recuperare alla chiave "host_permissions" nel file manifest.json.
ServiceWorkerGlobal.message
Il passaggio di messaggi dei service worker è disponibile oltre al passaggio di messaggi delle estensioni, ma i due sistemi non sono interoperabili. Ciò significa che i messaggi inviati utilizzando sendMessage() (disponibile da diverse API di estensione) non vengono intercettati dai gestori di messaggi dei service worker. Allo stesso modo, i messaggi inviati utilizzando postMessage() non vengono intercettati dai gestori di messaggi delle estensioni. Entrambi i tipi di gestori di messaggi, ovvero ServiceWorkerGlobal.message e browser.runtime.onMessage, sono supportati nei service worker delle estensioni.
Dovresti preferire la messaggistica delle estensioni, a meno che tu non abbia un motivo specifico per utilizzare la messaggistica dei service worker.