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

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

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

Манифестная декларация

Используйте свойство манифеста web_accessible_resources чтобы объявить, какие ресурсы доступны и в каком источнике. Это свойство представляет собой массив объектов, объявляющих правила доступа к ресурсам. Каждый объект перечисляет несколько ресурсов расширения и должен предоставить значение хотя бы для одного из ключей matches или extension_ids , чтобы указать источники, которые могут получить доступ к этим ресурсам.

{
  ...
  "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/*" ]
    }
  ],
  ...
}

Каждый объект массива содержит следующие элементы:

"resources"
Массив строк, каждая из которых содержит относительный путь к данному ресурсу из корневого каталога расширения. Ресурсы могут содержать звездочки ( * ) для совпадений с подстановочными знаками. Например, "/images/*" рекурсивно предоставляет все, что находится в каталоге images/ расширения, а "*.png" предоставляет все файлы PNG.
"matches"
Массив строк, каждая из которых содержит шаблон соответствия , определяющий, какие сайты могут получить доступ к этому набору ресурсов. Для сопоставления URL-адресов используется только источник. Источники включают соответствие субдоменов. Google Chrome выдает ошибку «Неверный шаблон соответствия», если путь к шаблону отличается от «/*».
"extension_ids"
Массив строк, каждая из которых содержит идентификатор расширения, которое может получить доступ к ресурсам.

Каждый элемент должен включать элемент "resources" и элемент "matches" или "extension_ids" . При этом устанавливается сопоставление, которое предоставляет указанные ресурсы либо веб-страницам, соответствующим шаблону, либо расширениям с совпадающими идентификаторами.

Ресурсы доступны на веб-странице по URL- chrome-extension://[PACKAGE ID]/[PATH] , который можно сгенерировать с помощью метода runtime.getURL() . Ресурсы обслуживаются с соответствующими заголовками CORS , поэтому они доступны с помощью fetch() .

Переход от веб-источника к ресурсу расширения блокируется, если ресурс не указан как доступный через Интернет. Обратите внимание на эти угловые случаи:

  • Когда расширение использует API webRequest для перенаправления запроса общедоступного ресурса на ресурс, недоступный через Интернет, такой запрос также блокируется.
  • Перенаправления с общедоступных ресурсов блокируются, даже если ресурс, недоступный через Интернет, принадлежит расширению перенаправления.
  • Навигация блокируется в режиме инкогнито, если в поле "incognito" не установлено значение "split" .

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

Пример

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