Módulos compartidos

Los módulos compartidos son colecciones de recursos sin permisos que pueden compartirse extensiones. Estos son los usos comunes de los módulos compartidos:

  • Como una API Puedes distribuir un módulo compartido que proporcione HTML, JS y otros recursos para proporcionan una API que se puede actualizar independientemente de las extensiones que dependen de ella.
  • Como una optimización de descarga. El módulo compartido contiene recursos comunes que usan muchas extensiones. Se descarga una vez, la primera vez que se instala una extensión dependiente.

Manifiesto

Los módulos compartidos se usan a través de dos campos de manifiesto: "export" y "import".

Exportar

El campo export indica que una extensión es un módulo compartido que exporta sus recursos:

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

Importar

Las extensiones y apps usan el campo import para declarar que dependen de los recursos de módulos compartidos específicos:

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

Acceso a recursos

Se accede a los recursos de módulos compartidos a través de una ruta reservada _modules/SHARED_MODULE_ID en la raíz de la extensión importada. Por ejemplo, para incluir la secuencia de comandos foo.js de un módulo compartido con ID "cccccccccccccccccccccccccccccccc", usa esta ruta desde la raíz de tu extensión:

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

Si la extensión importada tiene el ID “aaaaaaaaaaaaaaaaaaaaaaaaaaaaa”, entonces la URL completa de los recursos del módulo compartido es:

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

Ten en cuenta que los recursos de los módulos compartidos se superponen en el origen de la importación extensión, todos los privilegios otorgados a la extensión importada estarán disponibles para codificar en la configuración Módulos. Además, el módulo compartido puede acceder a los recursos de la extensión que importa mediante el uso de absolutas.

Instalar o desinstalar

Un módulo compartido se instala automáticamente desde Chrome Web Store cuando una extensión dependiente lo necesita y se desinstala automáticamente cuando se desinstala la última extensión que hace referencia a él. Para subir una extensión que usa un módulo compartido, este debe estar publicado en Chrome Web Store y la extensión no debe tener restricciones en el uso del Módulo compartido por parte de su lista de entidades permitidas.

Durante el desarrollo, tendrás que instalar manualmente los módulos compartidos que use tu extensión. Las instalaciones automáticas no se realizan para las extensiones que se transfieren o se cargan como desempaquetadas extensiones. Para módulos compartidos desempaquetados y instalados localmente, debes usar el campo key para asegúrate de que los módulos compartidos usen los IDs correctos.