Eventi nei service worker

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

Dichiara gli eventi di estensione

I gestori di eventi nei Service worker devono essere dichiarati in ambito globale, ovvero devono trovarsi al livello superiore dello script e non devono essere nidificati all'interno delle funzioni. Ciò garantisce che vengano registrati in modo sincrono all'esecuzione iniziale dello script, consentendo a Chrome di inviare eventi al service worker non appena viene avviato. 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 Service worker 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, mentre 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
Attivata in risposta a un'interazione di un utente con l'icona della barra degli strumenti dell'estensione, indipendentemente dal fatto che l'azione sia relativa a una pagina specifica (scheda) o all'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 dell'estensione sono concesse o revocate dall'utente.
chrome.runtime
Fornisce eventi relativi al ciclo di vita dell'estensione, messaggi inviati da altre parti dell'estensione e notifiche relative a un'estensione o a un aggiornamento di Chrome disponibile.
chrome.storage.onChanged
Attivata ogni volta che un oggetto StorageArea viene cancellato o quando il valore di una chiave viene modificato o impostato. Tieni presente che ogni istanza StorageArea ha il proprio evento onChanged.
chrome.webNavigation
Fornisce informazioni sullo stato delle richieste di navigazione durante il volo.

Filtri

Per limitare gli eventi a casi d'uso specifici o per eliminare chiamate di eventi non necessarie, utilizza le API che supportano i filtri eventi. Ad esempio, puoi considerare un'estensione in ascolto dell'evento tabs.onUpdated per rilevare quando un utente visita un sito web specifico. Questo evento verrà richiamato in 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 service worker web

I Service worker delle estensioni supportano più degli eventi del ciclo di vita descritti altrove.

ServiceWorkerGlobal.fetch

Attivato quando viene recuperato un elemento dal pacchetto dell'estensione o quando fetch() e XMLHttpRequest() vengono chiamati da un'estensione o uno script popup. Le chiamate dagli script di contenuti non vengono intercettate dal gestore fetch del service worker. Negli ultimi casi, dovrai aggiungere gli URL delle pagine da recuperare alla chiave "host_permissions" in manifest.json.

ServiceWorkerGlobal.message

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

Dovresti preferire i messaggi delle estensioni, a meno che tu non abbia un motivo specifico per utilizzare i messaggi dei service worker.