Módulos compartidos

Los módulos compartidos son colecciones de recursos sin permiso que se pueden compartir entre otras extensiones y apps. Los siguientes son algunos usos comunes de los módulos compartidos:

  • Como API Puedes distribuir un módulo compartido que pueda proporcionar HTML, JS y otras fuentes para brindar una API que se puede actualizar independientemente de las extensiones que dependen de él. Esto puede ser útil para entornos de ejecución y motores de juegos, en los que las apps suelen ser cargas útiles de datos más pequeñas que se ejecutan en el código del módulo compartido.
  • 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.

Manifest

Los módulos compartidos se usan a través de dos campos manifest: importar y 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
}

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

{
  "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 del módulo compartido mediante una ruta de acceso reservada _modules/SHARED_MODULE_ID en la raíz de tu extensión de importación. Por ejemplo, para incluir la secuencia de comandos “foo.js” de un módulo compartido con ID “cccccccccccccccccccccccccccccc”, usa esta ruta de acceso de la raíz de tu extensión:

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

Si la extensión de importación tiene el ID "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", entonces la URL completa de los recursos en el módulo compartido es la siguiente:

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

Ten en cuenta que, como los recursos de los módulos compartidos se superponen en el origen de la extensión de importación, todos los privilegios otorgados a la extensión de importación están disponibles para el código en los módulos compartidos. Además, el módulo compartido puede acceder a los recursos en la extensión de importación mediante rutas de acceso absolutas.

Instalación / desinstalación

Un módulo compartido se instala automáticamente desde Chrome Web Store cuando lo necesita una extensión dependiente 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, el módulo compartido debe publicarse en Chrome Web Store, y la lista de entidades permitidas no debe tener restricciones de uso del módulo compartido.

Durante el desarrollo, deberás instalar manualmente los módulos compartidos que use tu extensión. Las instalaciones automáticas no ocurren para las extensiones transferidas o que se cargan como extensiones desempaquetadas. En el caso de los módulos compartidos desempaquetados y instalados localmente, debes usar el campo key para asegurarte de que los módulos compartidos usen los ID correctos.