Manifest - Risorse accessibili dal web

Le risorse accessibili dal web sono file all'interno di un'estensione a cui possono accedere le pagine web o altre estensioni. In genere le estensioni utilizzano questa funzionalità per esporre immagini o altri asset che devono essere caricati nelle pagine web, ma qualsiasi asset incluso nel bundle di un'estensione può essere reso accessibile sul web.

Per impostazione predefinita, nessuna risorsa è accessibile dal web, in quanto ciò consente a un sito web dannoso di improntare le estensioni installate da un utente o sfruttare le vulnerabilità (ad esempio bug XSS) nelle estensioni installate. Solo le pagine o gli script caricati dall'origine di un'estensione possono accedere alle risorse di quell'estensione.

Dichiarazione relativa al file manifest

Utilizza la proprietà manifest web_accessible_resources per dichiarare quali risorse sono esposte e a quali origini. Questa proprietà è un array di oggetti che dichiara le regole di accesso alle risorse. Ogni oggetto elenca una serie di risorse di estensione e deve fornire un valore per almeno una delle chiavi matches o extension_ids per indicare le origini che possono accedere a queste risorse.

{
  ...
  "web_accessible_resources": [
    {
      "resources": [ "test1.png", "test2.png" ],
      "matches": [ "https://web-accessible-resources-1.glitch.me/*" ]
    }, {
      "resources": [ "test3.png", "test4.png" ],
      "matches": [ "https://web-accessible-resources-2.glitch.me/*" ]
    }
  ],
  ...
}

Ogni oggetto dell'array contiene i seguenti elementi:

"resources"
Un array di stringhe, ciascuna contenente un percorso relativo a una determinata risorsa dalla directory root dell'estensione. Le risorse possono contenere asterischi (*) per corrispondenze con caratteri jolly. Ad esempio, "/images/*" espone tutti i contenuti nella directory images/ dell'estensione in modo ricorsivo, mentre "*.png" espone tutti i file PNG.
"matches"
Un array di stringhe, ciascuna contenente un pattern di corrispondenza che specifica quali siti possono accedere a questo insieme di risorse. Per la corrispondenza degli URL viene utilizzata solo l'origine. Le origini includono la corrispondenza dei sottodomini. Google Chrome genera un errore di tipo "Pattern corrispondenza non valido" se il pattern ha un percorso diverso da "/*".
"extension_ids"
Un array di stringhe, ciascuna contenente l'ID di un'estensione che può accedere alle risorse.

Ogni elemento deve includere un elemento "resources" e un elemento "matches" o "extension_ids". In questo modo viene stabilita una mappatura che espone le risorse specificate alle pagine web corrispondenti al pattern o alle estensioni con ID corrispondenti.

Le risorse sono disponibili in una pagina web utilizzando l'URL chrome-extension://[PACKAGE ID]/[PATH], che può essere generato con il metodo runtime.getURL(). Le risorse vengono pubblicate con le intestazioni CORS appropriate, pertanto sono disponibili utilizzando fetch().

La navigazione da un'origine web a una risorsa di estensione viene bloccata a meno che la risorsa non sia elencata come accessibile dal web. Prendi nota dei seguenti casi angolari:

  • Quando un'estensione utilizza l'API webRequest per reindirizzare una richiesta di risorsa pubblica a una risorsa non accessibile dal web, anche la richiesta viene bloccata.
  • I reindirizzamenti dalle risorse pubbliche vengono bloccati anche se la risorsa non accessibile dal web è di proprietà dell'estensione di reindirizzamento.
  • La navigazione è bloccata in modalità di navigazione in incognito, a meno che il valore del campo "incognito" non sia impostato su "split".

Gli script di contenuti non devono essere consentiti.

Esempio

L'esempio di risorse accessibili al web mostra l'uso di questo elemento in un'estensione funzionante.