Mozilla WebExtension

Il contesto (scope) di uno script JavaScript in una normale pagina HTML è definito in maniera univoca all’interno dell’oggetto globale window.

Una WebExtension ha 3 contesti diversi e separati:

  1. Script di Contenuto
  2. Script delle pagine di background
  3. Background della WebExtension

Content script

Gli script di contenuto sono “iniettati” all’interno di una pagina web, hanno un insieme di API ristretto, sono separati dal background ma possono comunicare con esso con un sistema di messaggi, possono accedere al DOM della pagina web con una particolare modalità di accesso definita Xray vision.
Il contesto degli script di contenuto è dunque simile a quello di un normale script di pagina, tranne che per le limitazioni di cui sopra.

Script delle pagine di background

Se una WebExtension è configurata per gestire risorse HTML, può aprire nuovi tab e finestre, ognuna delle quali ha un contesto separato (window), proprio come una normale pagina web, ma ha i privilegi di accesso completo alle API di background.
Ma essendo il contesto separato per ogni documento di background, non è possibile condividere variabili globali: ciascuno script ha un proprio oggetto globale (window) distinto.
Per avere accesso ad un oggetto globale per l’estensione, condiviso tra tutti gli script delle pagine di background, è possibile accedere all’oggetto window di background, come spiegato nel prossimo paragrafo.

Background della WebExtension

Si può avere accesso all’oggetto window globale del background tramite la funzione runtime.getBackgroundPage().
ATTENZIONE: questo metodo non funziona nelle finestre private!

Tecnica di utilizzo

Se voglio avere una variabile globale per l’estensione ma voglio anche usare le finestre private, io faccio in questo modo:

  • definsco uno script di background in manifest.json
  • in esso gestisco l’apertura di nuovi tab/finestre
  • eseguo la comunicazione tra tab e background con i messaggi (come per i content script)

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.