Spec-Zone.ru › Web Extensions

ресурсы, доступные в веб-среде

Тип Array
Обязательное Нет
Версия манифеста 2 или выше
Пример
"web_accessible_resources": [
  "images/my-image.png"
]

Описание

Иногда вам нужно упаковать ресурсы (например, изображения, HTML, CSS или JavaScript) со своим расширением и сделать их доступными для веб-страниц и других расширений.

Примечание: До Firefox 105 расширения по умолчанию могли получить доступ к ресурсам, упакованным в других расширениях. С Firefox 105 и далее для предоставления другим расширениям доступа к ресурсам расширения они должны быть включены в этот ключ.

Например, расширение Beastify заменяет веб-страницу изображением зверя, выбранного пользователем. Изображения зверей упакованы с расширением. Чтобы отобразить выбранное изображение, расширение добавляет элементы <img>, у которых атрибут src указывает на изображение зверя. Для возможности загрузки изображений веб-страницей, они должны быть доступны в веб-среде.

С помощью ключа web_accessible_resources вы перечисляете все упакованные ресурсы, которые вы хотите сделать доступными для веб-страниц. Вы указываете их как пути относительно файла manifest.json.

Обратите внимание, что скрипты содержимого не нужно указывать как ресурсы, доступные в веб-среде.

Если расширение хочет использовать webRequest для перенаправления публичного URL-адреса (например, HTTPS) на страницу, упакованную в расширение, то расширение должно указать страницу в ключе web_accessible_resources.

Синтаксис манифеста V2

В манифесте V2 ресурсы, доступные в веб-среде, добавляются в виде массива под ключом, как это:

"web_accessible_resources": [
  "images/my-image.png"
]

Синтаксис манифеста V3

В манифесте V3 ключ web_accessible_resources представляет собой массив объектов, как это:

{
  // …
  "web_accessible_resources": [
    {
      "resources": [ "test1.png", "test2.png" ],
      "matches": [ "https://web-accessible-resources-1.glitch.me/*" ]
    }, {
      "resources": [ "test3.png", "test4.png" ],
      "matches": [ "https://web-accessible-resources-2.glitch.me/*" ],
      "use_dynamic_url": true
    }
  ],
  // …
}

Каждый объект должен включать свойство "resources" и либо свойство "matches", либо свойство "extension_ids" из следующих свойств:

Имя Тип Описание
extension_ids String Список идентификаторов расширений, указывающих на расширения, которые могут получить доступ к ресурсам.
matches String Список шаблонов совпадения URL-адресов, указывающих на страницы, которые могут получить доступ к ресурсам. Используется только источник для сопоставления URL-адресов. Сопоставление включает поддомены. Пути игнорируются.
resources String Массив ресурсов для экспонирования. Ресурсы указываются в виде строк и могут содержать * для сопоставления с подстановочными знаками. Например, "/images/*" экспонирует все в каталоге расширения /images рекурсивно, а "*.png" экспонирует все файлы PNG.
use_dynamic_url Boolean Определяет, будут ли ресурсы доступны через динамический идентификатор. Динамический идентификатор генерируется за сессию и перегенерируется при перезапуске браузера или перезагрузке расширения.

Использование ресурсов, доступных в веб-среде

Предположим, ваше расширение содержит файл изображения по адресу images/my-image.png, как это:

my-extension-files/
    manifest.json
    my-background-script.js
    images/
        my-image.png

Чтобы позволить веб-странице использовать элемент <img>, у которого атрибут src указывает на это изображение, вы бы указали web_accessible_resources следующим образом:

"web_accessible_resources": ["images/my-image.png"]

Файл затем доступен по URL-адресу:

moz-extension://<extension-UUID>/images/my-image.png"

<extension-UUID> — не идентификатор вашего расширения. Этот идентификатор генерируется случайным образом для каждого экземпляра браузера. Это предотвращает определение браузера веб-сайтами путём анализа установленных расширений.

Примечание: В Chrome в манифесте V2 идентификатор расширения фиксирован. Когда ресурс указан в web_accessible_resources, он доступен как chrome-extension://<your-extension-id>/<path/to/resource>. В манифесте V3 Chrome может использовать динамический URL, установив use_dynamic_url на true.

Рекомендуется использовать runtime.getURL для получения URL ресурса, передав путь относительно manifest.json, например:

browser.runtime.getURL("images/my-image.png");
// something like:
// moz-extension://944cfddf-7a95-3c47-bd9a-663b3ce8d699/images/my-image.png

Этот подход предоставляет вам правильный URL-адрес независимо от браузера, на котором запущено ваше расширение.

Подстановочные знаки

Записи web_accessible_resources могут содержать подстановочные знаки. Например, следующая запись также будет работать для включения ресурса по адресу "images/my-image.png":

  "web_accessible_resources": ["images/*.png"]

Безопасность

Если вы сделаете страницу доступной в веб-среде, любой веб-сайт может связаться с этой страницей или перенаправить на неё. Страница должна обрабатывать любой ввод (например, данные POST) так, как будто он пришёл из ненадежного источника, точно так же, как и обычная веб-страница.

Ресурсы расширений, доступные в веб-среде, не блокируются средствами CORS или CSP. Из-за этой возможности обхода проверок безопасности расширениям следует избегать использования веб-скриптов, когда это возможно. Веб-скрипт расширения может быть непредсказуемо использован вредоносными веб-сайтами для ослабления безопасности других веб-сайтов. Следуйте рекомендациям по безопасности, избегая вставки moz-extension:-URL-адресов на веб-страницы и гарантируя актуальность сторонних библиотек.

Пример

"web_accessible_resources": ["images/my-image.png"]

Сделать файл по адресу "images/my-image.png" доступным в веб-среде.

Совместимость с браузерами

Рабочие столы Мобильные
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet
web_accessible_resources Да 14 48 ? Да 14 ? ? 48 ? 15 ?
extension_ids 88 88 109 ? 74 Нет ? ? 109 ? Нет ?
matches 88 88 109 ? 74 15.4 ? ? Нет ? 15.4 ?
resources 88 88 109 ? 74 15.4 ? ? Нет ? 15.4 ?
use_dynamic_url 88 88 Нет ? 74
НетБазовый URL расширения всегда динамичен в Safari.
? ? Нет ?
НетБазовый URL расширения всегда динамичен в Safari.
?

© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/web_accessible_resources

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API