Freigegebene Module

Freigegebene Module sind berechtigungslose Sammlungen von Ressourcen, die von anderen Erweiterungen und Anwendungen gemeinsam genutzt werden können. Gängige Anwendungsbereiche für gemeinsam genutzte Module sind:

  • Als API. Sie können ein freigegebenes Modul verteilen, das HTML, JS und eine andere Quelle bereitstellen kann, um eine API bereitzustellen, die unabhängig von den davon abhängigen Erweiterungen aktualisiert werden kann. Dies kann für Laufzeiten und Spiel-Engines nützlich sein, bei denen Anwendungen oft kleinere Nutzlasten von Daten sind, die im Code des freigegebenen Moduls ausgeführt werden.
  • Zur Download-Optimierung. Das freigegebene Modul enthält allgemeine Ressourcen, die von vielen Erweiterungen verwendet werden. Sie wird einmal heruntergeladen, wenn eine abhängige Erweiterung zum ersten Mal installiert wird.

Manifest

Freigegebene Module werden über zwei Manifest-Felder verwendet: Export und Import.

Das Feld export gibt an, dass eine Erweiterung ein freigegebenes Modul ist, das ihre Ressourcen exportiert:

{
  "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
}

Das Feld import wird von Erweiterungen und Apps verwendet, um zu deklarieren, dass sie von den Ressourcen aus bestimmten freigegebenen Modulen abhängig sind:

{
  "version": "1.0",
  "name": "My Importing Extension",
  ...
  "import": [
    {"id": "cccccccccccccccccccccccccccccccc"},
    {"id": "dddddddddddddddddddddddddddddddd"
     "minimum_version": "0.5" // optional
    },
  ]
}

Auf Ressourcen zugreifen

Freigegebene Module werden über einen reservierten Pfad _modules/SHARED_MODULE_ID im Stammverzeichnis Ihrer Importerweiterung aufgerufen. Wenn Sie beispielsweise das Skript "foo.js" aus einem freigegebenen Modul mit der ID "cccccccccccccccccccccccccccc" einschließen möchten, verwenden Sie folgenden Pfad vom Stammverzeichnis Ihrer Erweiterung:

<script src="_modules/cccccccccccccccccccccccccccccccc/foo.js">

Wenn die Importerweiterung die ID "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" hat, lautet die vollständige URL zu Ressourcen im freigegebenen Modul:

chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/_modules/cccccccccccccccccccccccccccccccc/

Da Ressourcen aus freigegebenen Modulen dem Ursprung der Importerweiterung überlagert werden, stehen alle Berechtigungen, die der Importerweiterung gewährt werden, für den Code in freigegebenen Modulen zur Verfügung. Außerdem kann das freigegebene Modul über absolute Pfade auf Ressourcen in der Importerweiterung zugreifen.

Installieren / Deinstallieren

Ein freigegebenes Modul wird automatisch aus dem Chrome Web Store installiert, wenn es von einer abhängigen Erweiterung benötigt wird. Es wird automatisch deinstalliert, wenn die letzte Erweiterung, die auf sie verweist, deinstalliert wird. Wenn Sie eine Erweiterung hochladen möchten, die ein freigegebenes Modul verwendet, muss es im Chrome Web Store veröffentlicht werden und die Verwendung des freigegebenen Moduls darf nicht durch ihre Zulassungsliste eingeschränkt werden.

Bei der Entwicklung müssen Sie alle von der Erweiterung verwendeten freigegebenen Module manuell installieren. Erweiterungen, die per Sideload oder als entpackte Erweiterungen geladen werden, werden nicht automatisch installiert. Bei lokal installierten, entpackten freigegebenen Modulen müssen Sie das Feld key verwenden, damit für die freigegebenen Module die richtigen IDs verwendet werden.