Eventi nei service worker

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

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 sono descritti alcuni dei problemi 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 delle estensioni vengono concesse o revocate dall'utente.
chrome.runtime
Fornisce eventi relativi al ciclo di vita dell'estensione, messaggi inviati da altre parti dell'estensione e una notifica di un aggiornamento di Chrome o di un'estensione disponibile.
chrome.storage.onChanged
Si attiva 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 volo.

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, immagina 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/',
    },
  ],
};

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

Eventi del service worker web

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

ServiceWorkerGlobal.fetch

Viene attivato quando viene recuperato un elemento dal pacchetto dell'estensione o quando fetch() e XMLHttpRequest() vengono chiamati da uno script di estensione o 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 in diverse API di estensioni) non vengono intercettati dai gestori dei messaggi del servizio 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.