I moduli condivisi sono raccolte di risorse senza autorizzazione che possono essere condivise tra altre estensioni e app. Gli utilizzi comuni dei Moduli condivisi sono:
- Come API. Puoi distribuire un Modulo condiviso in grado di fornire HTML, JS e altre origini per fornire un'API che può essere aggiornata indipendentemente dalle estensioni che dipendono da quest'ultima. Questo può essere utile per runtime e motori di gioco, in cui le app sono spesso payload di dati più piccoli che vengono eseguiti sul codice del modulo condiviso.
- Come ottimizzazione dei download. Il modulo condiviso contiene risorse comuni utilizzate da molte estensioni. Viene scaricato una volta, la prima volta che viene installata un'estensione dipendente.
Manifest
I moduli condivisi vengono utilizzati mediante due campi manifest: esportazione e importazione.
Il campo export indica che un'estensione è un modulo condiviso che esporta le proprie risorse:
{
"version": "1.0",
"name": "My Shared Module",
"export": {
// Optional list of extension IDs explicitly allowed to
// import this Shared Module's resources. If no allowlist
// is given, all extensions are allowed to import it.
"allowlist": [
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
]
}
// Note: no permissions are allowed in Shared Modules
}
Il campo import viene utilizzato da estensioni e app per dichiarare che dipendono dalle risorse di determinati moduli condivisi:
{
"version": "1.0",
"name": "My Importing Extension",
...
"import": [
{"id": "cccccccccccccccccccccccccccccccc"},
{"id": "dddddddddddddddddddddddddddddddd"
"minimum_version": "0.5" // optional
},
]
}
Accesso alle risorse
Le risorse del modulo condiviso sono accessibili tramite un percorso riservato _modules/SHARED_MODULE_ID nella directory principale dell'estensione di importazione. Ad esempio, per includere lo script "foo.js" di un Modulo condiviso con ID "ccCCCCCCCCCCCCCC", utilizza questo percorso dalla radice dell'estensione:
<script src="_modules/cccccccccccccccccccccccccccccccc/foo.js">
Se l'estensione di importazione ha l'ID "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/_modules/cccccccccccccccccccccccccccccccc/
Tieni presente che, poiché le risorse dei moduli condivisi sono sovrapposte all'origine dell'estensione di importazione, tutti i privilegi concessi all'estensione di importazione sono disponibili per il codice nei Moduli condivisi. Inoltre, il modulo condiviso è in grado di accedere alle risorse nell'estensione di importazione utilizzando percorsi assoluti.
Installa / disinstalla
Un modulo condiviso viene installato automaticamente dal Chrome Web Store quando richiesto da un'estensione dipendente e disinstallato automaticamente quando è stata disinstallata l'ultima estensione che fa riferimento alla stessa. Per caricare un'estensione che utilizza un Modulo condiviso, il Modulo condiviso deve essere pubblicato nel Chrome Web Store e l'estensione non deve essere limitata dall'utilizzo del Modulo condiviso dalla sua lista consentita.
Durante lo sviluppo, dovrai installare manualmente tutti i Moduli condivisi utilizzati dall'estensione. Le installazioni automatiche non vengono eseguite per le estensioni installate tramite sideload o caricate come estensioni non pacchettizzate. Per i moduli condivisi non pacchettizzati installati localmente, devi utilizzare il campo key per assicurarti che i moduli condivisi utilizzino gli ID corretti.