Moduły udostępnione

Moduły współdzielone to bez uprawnień kolekcje zasobów, które można udostępniać między innymi rozszerzeniami i aplikacjami. Typowe zastosowania modułów współdzielonych to:

  • Jako interfejs API. Możesz rozpowszechnić moduł udostępniany, który może udostępniać kod HTML, JS i inne źródło, udostępniając interfejs API, który można aktualizować niezależnie od zależnych od niego rozszerzeń. Jest to przydatne w środowiskach wykonawczych i silnikach gier, gdzie aplikacje są często mniejszymi ładunkami danych uruchamianych w kodzie modułu współdzielonego.
  • Jako optymalizacja pobierania. Moduł współdzielony zawiera wspólne zasoby używane przez wiele rozszerzeń. Jest pobierana raz, gdy rozszerzenie zależne jest instalowane po raz pierwszy.

Plik manifestu

Moduły udostępniane są używane przez 2 pola manifestu: eksport i import.

Pole eksport wskazuje, że rozszerzenie jest modułem współdzielonym, który eksportuje swoje zasoby:

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

Pole import jest używane przez rozszerzenia i aplikacje do deklarowania, że zależą one od zasobów z konkretnych modułów współdzielonych:

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

Uzyskiwanie dostępu do zasobów

Dostęp do zasobów modułu współdzielonego uzyskuje zarezerwowana ścieżka _modules/SHARED_MODULE_ID w katalogu głównym importowanego rozszerzenia. Aby na przykład uwzględnić skrypt „foo.js” z modułu współdzielonego o identyfikatorze „cccccccccccccccccccccccccccc”, użyj tej ścieżki prowadzącej do katalogu głównego rozszerzenia:

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

Jeśli rozszerzenie do importowania ma identyfikator „aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”, wtedy pełny adres URL zasobów w module współdzielonym będzie wyglądać tak:

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

Ponieważ zasoby z modułów współdzielonych są nakładane na źródło rozszerzenia importu, wszystkie uprawnienia przyznane rozszerzeniu do importu są dostępne do kodowania w modułach współdzielonych. Ponadto moduł współużytkowany ma dostęp do zasobów w rozszerzeniu importowanym za pomocą ścieżek bezwzględnych.

Instalowanie i odinstalowywanie

Moduł udostępniony jest automatycznie instalowany z Chrome Web Store, gdy wymaga tego zależne rozszerzenie, i odinstalowany po odinstalowaniu ostatniego, które się do niego odwołuje. Aby przesłać rozszerzenie korzystające z modułu współdzielonego, musi on być opublikowany w Chrome Web Store, a jego lista nie może być ograniczona do modułu udostępnianego.

W trakcie programowania musisz ręcznie zainstalować wszystkie moduły współdzielone, których używa rozszerzenie. Automatyczne instalowanie nie dotyczy rozszerzeń zainstalowanych z innego urządzenia lub wczytywanych jako rozszerzenia bez pakietu. W przypadku zainstalowanych lokalnie i rozpakowanych modułów udostępnionych musisz użyć pola klucz, aby mieć pewność, że moduły te używają prawidłowych identyfikatorów.