Ресурсы, доступные через Интернет, — это файлы внутри расширения, к которым могут получить доступ веб-страницы или другие расширения. Расширения обычно используют эту функцию для предоставления изображений или других ресурсов, которые необходимо загрузить на веб-страницы, но любой ресурс, включенный в пакет расширения, можно сделать доступным через Интернет.
По умолчанию никакие ресурсы не доступны через Интернет, поскольку это позволяет вредоносному веб-сайту распознавать расширения, установленные пользователем, или использовать уязвимости (например, ошибки XSS ) в установленных расширениях. Только страницы или сценарии, загруженные из источника расширения, могут получить доступ к ресурсам этого расширения.
Манифестная декларация
Используйте свойство манифеста web_accessible_resources
, чтобы объявить, какие ресурсы доступны и в каком источнике. Это свойство представляет собой массив объектов, объявляющих правила доступа к ресурсам. Каждый объект сопоставляет массив ресурсов расширения с массивом URL-адресов и/или идентификаторов расширений, которые могут получить доступ к этим ресурсам.
{
...
"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"
- Массив строк, каждая из которых содержит относительный путь к данному ресурсу из корневого каталога расширения. Ресурсы могут содержать звездочки (
*
) для совпадений с подстановочными знаками. Например,"/images/*"
рекурсивно предоставляет все, что находится в каталогеimages/
расширения, а"*.png"
предоставляет все файлы PNG. -
"matches"
- Массив строк, каждая из которых содержит шаблон соответствия , указывающий, какие сайты могут получить доступ к этому набору ресурсов. Для сопоставления URL-адресов используется только источник. Источники включают соответствие субдоменов. Google Chrome выдает ошибку «Неверный шаблон соответствия», если путь к шаблону отличается от «/*».
-
"extension_ids"
- Массив строк, каждая из которых содержит идентификатор расширения, которое может получить доступ к ресурсам.
-
"use_dynamic_url"
- Если это правда, разрешить доступ к ресурсам только через динамический идентификатор. Динамический идентификатор генерируется для каждого сеанса. Это означает, что он восстанавливается при перезапуске браузера или перезагрузке расширения.
Каждый элемент должен включать элемент "resources"
и элемент "matches"
или "extension_ids"
. При этом устанавливается сопоставление, которое предоставляет указанные ресурсы либо веб-страницам, соответствующим шаблону, либо расширениям с совпадающими идентификаторами. Элемент "use_dynamic_url"
является необязательным.
Навигация по ресурсам
Ресурсы доступны на веб-странице через URL-адрес chrome-extension://[PACKAGE ID]/[PATH]
, который можно сгенерировать с помощью метода runtime.getURL()
. Ресурсы обслуживаются с соответствующими заголовками CORS , поэтому они доступны через fetch()
.
Переход от веб-источника к ресурсу расширения блокируется, если ресурс не указан как доступный через Интернет. Обратите внимание на эти угловые случаи:
- Когда расширение использует API webRequest для перенаправления запроса общедоступного ресурса на ресурс, недоступный через Интернет, такой запрос также блокируется.
- Вышеупомянутое справедливо, даже если ресурс, недоступный через Интернет, принадлежит расширению перенаправления.
- Навигация блокируется в режиме инкогнито, если в поле
"incognito"
не установлено значение"split"
.
Сами по себе сценарии содержимого разрешать не требуется.
Пример
Пример веб-доступных ресурсов демонстрирует использование этого элемента в рабочем расширении.