ресурсы, доступные в веб-среде
| Тип | 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