Documenti fuori schermo in Manifest V3

Ian Stanion
Ian Stanion

Per sostituire la funzionalità nella transizione dalle pagine in background ai service worker delle estensioni, gli sviluppatori possono utilizzare l'API chrome.offscreen e l'autorizzazione relativa al file manifest a partire dalla versione 109 di Chrome. La richiesta di questa autorizzazione consente la creazione di documenti fuori schermo per utilizzare le API DOM senza aprire in modo invasivo nuove finestre o schede che interrompono l'esperienza utente. L'API chrome.offscreen è ora disponibile nelle estensioni di Chrome.

In Chromium, le estensioni Manifest V3 sono basate sui service worker, ma i Service worker non forniscono supporto per le stesse API e gli stessi meccanismi delle pagine complete basate su documenti (che includono pagine di sfondo ed eventi). Inoltre, l'utilizzo di script di contenuti per accedere alle API DOM nelle pagine web lascia l'estensione in balzo di diversi criteri di sicurezza dei contenuti a livello di singola pagina. Per risolvere questo problema, stiamo introducendo i documenti fuori schermo per supportare le funzionalità e le API relative al DOM, consentendo alle estensioni Manifest V3 di aprire documenti fuori schermo minimi, con ambito e relativamente senza autorizzazione in fase di runtime tramite un'API dedicata.

Informazioni sulla funzionalità

Poiché i documenti fuori schermo sono progettati specificamente per gestire casi d'uso non supportati nei service worker (ad esempio la riproduzione audio), la durata di questa pagina e le autorizzazioni che le verranno concesse sono separate da quelle del service worker dell'estensione. La pagina avrà un meccanismo di ciclo di vita, simile alle pagine di eventi in Manifest V2, nel senso che verrà rimossa quando interrompe l'esecuzione di azioni. Inoltre, lo user agent può applicare ulteriori restrizioni sulla durata specifica per lo scopo specificato. I documenti fuori schermo sono progettati per colmare le lacune delle API accessibili solo alle API DOM. Per questo motivo, le API di estensione non devono essere esposte direttamente in questo contesto. Per ridurre la probabilità che le estensioni le utilizzino come "sostituzione della pagina in background", solo le API di messaggistica chrome.runtime sono esposte al documento fuori schermo. Gli sviluppatori possono anche utilizzare i messaggi web rivendicando il documento fuori schermo come Client tramite il proprio service worker. Poiché alcuni casi d'uso, in particolare lo scraping di siti, richiedono l'accesso a frame multiorigine, consentiamo a questi documenti di incorporare frame multiorigine seguendo le stesse regole che hanno attualmente le pagine delle estensioni. Nei documenti fuori schermo, gli script di contenuti specificati dall'estensione possono essere eseguiti in questi frame per estrarre eventuali contenuti necessari, come farebbero per qualsiasi normale pagina web.

Motivi e richiedere uno scopo

La creazione di un documento fuori schermo richiede motivi dichiarati e ulteriori giustificazioni. Questi motivi sono elencati nella documentazione di riferimento dell'API e gestiscono la durata del documento in modi diversi. Ad esempio, per la riproduzione di un documento aperto per la riproduzione audio vengono applicate regole diverse rispetto a quelle per un documento aperto per la gestione degli appunti. Puoi anche aggiungere ulteriori dettagli sullo scopo del documento fuori schermo nella giustificazione, ovvero una stringa scritta dallo sviluppatore e non un parametro con effetti sul documento. Nel tempo potrebbero essere aggiunti ulteriori motivi all'API, man mano che gli sviluppatori condividono i loro feedback e casi d'uso.

Uno sguardo al futuro

Per semplificare l'implementazione, la prima versione di questa API supporta solo una singola pagina per estensione, per profilo alla volta. Nelle versioni future, potremmo allentare questa impostazione in modo da supportare più pagine. Attualmente, se l'estensione viene eseguita in modalità suddivisa con un profilo di navigazione in incognito attivo, entrambi i profili normale e in incognito possono avere ciascuno un documento fuori schermo. Si prevede inoltre di fornire alla funzionalità DOM del worker dell'estensione in un secondo momento. Puoi "a prova di futuro" le tue estensioni accoppiando le funzioni che utilizzano l'API offscreen con una funzione con commenti equivalente nel Service worker per la sostituzione in un secondo momento.

// Solution 1 - Service workers cannot directly interact with
// the system clipboard. To work around this, we'll create an offscreen
// document and pass the data we want to write to the clipboard.
async function addToClipboard(value) {
    await chrome.offscreen.createDocument({
      url: 'offscreen.html',
      reasons: [chrome.offscreen.Reason.CLIPBOARD],
      justification: 'Write text to the clipboard.',
    });
  }


// Solution 2 – Once extension service workers can use the Clipboard API,
// replace the offscreen document based implementation with something like this
async function addToClipboardV2(value) {
  navigator.clipboard.writeText(value);
}

Inoltre, man mano che le API e la funzionalità DOM vengono aggiunte al service worker, l'elenco di motivi per creare un documento verrà aggiunto o ridotto a seconda dello stato attuale del service worker e dei motivi per cui utilizzare documenti fuori schermo.

Conclusione

I documenti fuori schermo consentono le estensioni che richiedono l'accesso tramite DOM o interazione con le finestre che attualmente non è possibile ottenere nei Service worker. Fornisce inoltre un approccio flessibile, in cui è possibile aggiungere nuovi casi d'uso e rimuovere quelli risolti in futuro. Le estensioni devono utilizzare l'API per documenti fuori schermo proposta per casi d'uso specifici e il contesto principale in background dell'estensione deve rimanere il service worker specificato nel manifest. Il documento fuori schermo non deve essere il posto in cui archiviare la logica dell'estensione principale perché ha accesso limitato all'API. La durata di un documento fuori schermo è indipendente dal service worker che lo ha creato. Le considerazioni sulla durata del service worker e i casi d'uso relativi al lifetime dei service worker nelle estensioni verranno trattati in un post del blog separato. I motivi per utilizzare documenti fuori schermo variano nel tempo man mano che funzionalità e API vengono aggiunte al service worker stesso. Non vediamo l'ora di ricevere feedback degli sviluppatori man mano che ciò si realizza.

Foto di Kari Shea su Unsplash