Modules partagés

Les modules partagés sont des collections de ressources sans autorisation qui peuvent être partagées entre d'autres extensions et applications. Voici quelques cas d'utilisation courants des modules partagés:

  • En tant qu'API Vous pouvez distribuer un module partagé pouvant fournir du code HTML, JavaScript et une autre source afin de fournir une API pouvant être mise à jour indépendamment des extensions qui en dépendent. Cela peut être utile pour les environnements d'exécution et les moteurs de jeu, dans lesquels les applications sont souvent des charges utiles de données plus petites qui s'exécutent sur le code du module partagé.
  • Pour optimiser les téléchargements. Le module partagé contient les ressources courantes utilisées par de nombreuses extensions. Il est téléchargé une fois, la première fois qu'une extension dépendante est installée.

Manifest

Les modules partagés sont utilisés via deux champs manifest: exportation et importation.

Le champ export indique qu'une extension est un module partagé qui exporte ses ressources:

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

Le champ import permet aux extensions et aux applications de déclarer qu'elles dépendent des ressources de modules partagés particuliers:

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

Accéder aux ressources

Les ressources de module partagé sont accessibles par un chemin réservé _modules/SHARED_MODULE_ID à la racine de votre extension d'importation. Par exemple, pour inclure le script "foo.js" issu d'un module partagé dont l'ID est "cccccccccccccccccccccccccc", utilisez le chemin d'accès suivant à partir de la racine de votre extension:

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

Si l'extension d'importation a l'ID "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", l'URL complète des ressources dans le module partagé est la suivante:

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

Étant donné que les ressources des modules partagés sont superposées à l'origine de l'extension d'importation, tous les droits accordés à l'extension d'importation sont disponibles pour coder dans les modules partagés. En outre, le module partagé peut accéder aux ressources de l'extension d'importation à l'aide de chemins absolus.

Installer / Désinstaller

Un module partagé est automatiquement installé à partir du Chrome Web Store en cas de besoin par une extension dépendante, puis désinstallé automatiquement lorsque la dernière extension qui y fait référence est désinstallée. Pour importer une extension qui utilise un module partagé, celui-ci doit être publié sur le Chrome Web Store et sa liste d'autorisation ne doit pas empêcher l'extension d'utiliser le module partagé.

Pendant le développement, vous devrez installer manuellement les modules partagés que votre extension utilise. Les installations automatiques ne sont pas effectuées pour les extensions téléchargées indépendamment ou chargées en tant qu'extensions non empaquetées. Pour les modules partagés non empaquetés installés localement, vous devez utiliser le champ key pour vous assurer que les modules partagés utilisent les bons ID.