Манифест — доступные веб-ресурсы,Манифест — доступные веб-ресурсы

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

По умолчанию никакие ресурсы не доступны через Интернет, поскольку это позволяет вредоносному веб-сайту распознавать расширения, установленные пользователем, или использовать уязвимости (например, ошибки 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" .

Сами по себе сценарии содержимого разрешать не требуется.

Пример

Пример веб-доступных ресурсов демонстрирует использование этого элемента в рабочем расширении.