Eventi nei service worker

I worker di servizio delle estensioni supportano sia gli eventi dei worker di servizio standard sia molti eventi nelle API di estensione. Questa sezione descrive le opzioni disponibili e fornisce suggerimenti per l'utilizzo.

Dichiarare gli eventi di estensione

I gestori eventi nei worker di servizio devono essere dichiarati nell'ambito globale, il che significa che devono trovarsi al livello superiore dello script e non essere nidificati all'interno di funzioni. In questo modo, vengono registrati in modo sincrono all'esecuzione iniziale dello script, il che consente a Chrome di inviare eventi al service worker non appena si avvia. Ad esempio:

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

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

Eventi comuni

I worker di servizio delle estensioni supportano gli eventi in API specifiche. Di seguito vengono 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 maggiori dettagli, consulta la documentazione dell'API collegata, in particolare gli eventi, i metodi o le proprietà che vuoi utilizzare.

chrome.action
Si attiva in risposta a un'interazione dell'utente con l'icona della barra degli strumenti dell'estensione, indipendentemente dal fatto che l'azione riguardi una pagina (scheda) specifica o l'intera estensione.
chrome.management
Fornisce eventi relativi all'installazione, alla disinstallazione, all'attivazione e alla disattivazione delle estensioni.
chrome.notifications
Fornisce eventi relativi all'interazione dell'utente con le notifiche di sistema generate dall'estensione.
chrome.permissions
Indica quando le autorizzazioni per l'estensione vengono concesse o revocate dall'utente.
chrome.runtime
Fornisce eventi relativi al ciclo di vita delle estensioni, messaggi inviati da altre parti dell'estensione e notifiche di un'estensione disponibile o di un aggiornamento di Chrome.
chrome.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.
chrome.webNavigation
Fornisce informazioni sullo stato delle richieste di navigazione in corso.

Filtri

Per limitare gli eventi a casi d'uso specifici o eliminare chiamate di eventi non necessarie, utilizza API che supportano i filtri evento. Ad esempio, prendi in considerazione un'estensione in ascolto dell'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/',
    },
  ],
};

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

Eventi dei worker di servizi web

Gli addetti al servizio di estensione supportano più degli eventi di ciclo di vita descritti altrove.

ServiceWorkerGlobal.fetch

Attivato quando viene recuperato qualsiasi elemento dal pacchetto dell'estensione o quando fetch() e XMLHttpRequest() vengono richiamati da un'estensione o da uno script popup. Le chiamate dagli script dei contenuti non vengono intercettate dall'handler fetch del service worker. In questi casi, dovrai aggiungere gli URL delle pagine che vuoi recuperare alla chiave "host_permissions" in manifest.json.

ServiceWorkerGlobal.message

La trasmissione di messaggi del servizio worker è disponibile oltre alla trasmissione 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. Analogamente, i messaggi inviati utilizzando postMessage() non vengono intercettati dai gestori dei messaggi delle estensioni. Entrambi i tipi di gestori dei messaggi, ovvero ServiceWorkerGlobal.message e chrome.runtime.onMessage, sono supportati nei worker di servizio delle estensioni.

Ti consigliamo di preferire la messaggistica delle estensioni, a meno che tu non abbia un motivo specifico per utilizzare la messaggistica dei worker di servizio.