Общие модули

Общие модули — это закрытые коллекции ресурсов, которые могут использоваться совместно расширениями. Общие способы использования общих модулей:

  • В качестве API. Вы можете распространять общий модуль, который может предоставлять HTML, JS и другие ресурсы для предоставления API, который можно обновлять независимо от зависящих от него расширений.
  • В качестве оптимизации загрузки. Общий модуль содержит общие ресурсы, используемые многими расширениями. Он загружается один раз, при первой установке зависимого расширения.

Манифест

Общие модули используются через два поля манифеста : "export" и "import" .

Экспорт

Поле экспорта указывает, что расширение является общим модулем, который экспортирует свои ресурсы:

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

Импорт

Поле импорта используется расширениями и приложениями, чтобы объявить, что они зависят от ресурсов определенных общих модулей:

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

Доступ к ресурсам

Доступ к ресурсам общего модуля осуществляется по зарезервированному пути _modules/SHARED_MODULE_ID в корне вашего импортирующего расширения. Например, чтобы включить скрипт foo.js из общего модуля с идентификатором «cccccccccccccccccccccccccccccccc», используйте этот путь от корня вашего расширения:

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

Если импортирующее расширение имеет идентификатор «аааааааааааааааааааааааааааа», то полный URL-адрес ресурсов в общем модуле будет следующим:

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

Обратите внимание: поскольку ресурсы из общих модулей накладываются на источник импортирующего расширения, все привилегии, предоставленные импортирующему расширению, доступны для кода в общих модулях. Кроме того, общий модуль может получать доступ к ресурсам в расширении импорта, используя абсолютные пути.

Установить/удалить

Общий модуль автоматически устанавливается из Интернет-магазина Chrome, когда это необходимо зависимому расширению, и автоматически удаляется, когда удаляется последнее расширение, ссылающееся на него. Чтобы загрузить расширение, использующее общий модуль, общий модуль должен быть опубликован в Интернет-магазине Chrome, и расширение не должно быть ограничено в использовании общего модуля в своем белом списке.

Во время разработки вам нужно будет вручную установить все общие модули, которые использует ваше расширение. Автоматическая установка не происходит для расширений, которые загружаются неопубликованно или как распакованные расширения. Для локально установленных и распакованных общих модулей необходимо использовать ключевое поле, чтобы гарантировать, что общие модули используют правильные идентификаторы.