Eventi nei service worker

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:

Non consigliato
browser.storage.local.get(["badgeText"], ({ badgeText }) => {
  browser.action.setBadgeText({ text: badgeText });
  browser.action.onClicked.addListener(handleActionClick);
});
Più
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 StorageArea viene cancellato o quando il valore di una chiave viene modificato o impostato. Tieni presente che ogni istanza di StorageArea ha il proprio evento onChanged.
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.