Moduli condivisi

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.