Как объявлять разрешения

Чтобы использовать большинство API расширений и функций, необходимо объявить назначение расширения в полях разрешений манифеста. Расширения могут запрашивать разрешения следующих категорий, которые указываются с помощью соответствующих ключей манифеста:

"permissions"
Содержит элементы из списка известных строк. Изменения могут вызвать предупреждение.
"optional_permissions"
Предоставляются пользователем во время выполнения, а не во время установки.
"content_scripts.matches"
Содержит один или несколько шаблонов соответствия, которые позволяют скриптам контента внедряться в один или несколько хостов. Изменения могут вызвать предупреждение.
"host_permissions"
Содержит один или несколько шаблонов соответствия, которые предоставляют доступ к одному или нескольким хостам. Изменения могут вызвать предупреждение.
"optional_host_permissions"
Пользователь предоставляет их во время работы приложения, а не при установке.

Разрешения помогают ограничить ущерб, если расширение будет взломано вредоносным ПО. Некоторые предупреждения о разрешениях показываются пользователям для получения согласия перед установкой или во время работы приложения, как описано в разделе Разрешения с предупреждениями.

По возможности используйте необязательные разрешения, чтобы пользователи могли контролировать доступ к ресурсам и данным.

Если для API требуется разрешение, в документации объясняется, как его объявить. Пример: Storage API.

Манифест

Ниже приведен пример раздела разрешений в файле manifest.

manifest.json:

{
  "name": "Permissions Extension",
  ...
  "permissions": [
    "activeTab",
    "contextMenus",
    "storage"
  ],
  "optional_permissions": [
    "topSites",
  ],
  "host_permissions": [
    "https://www.developer.chrome.com/*"
  ],
  "optional_host_permissions":[
    "https://*/*",
    "http://*/*"
  ],
  ...
  "manifest_version": 3
}

Разрешения для организаторов

Разрешения хоста позволяют расширениям взаимодействовать с шаблонами соответствия URL. Для работы некоторых API Chrome требуются разрешения хоста в дополнение к собственным разрешениям API, которые описаны на каждой справочной странице. Вот несколько примеров:

В некоторых случаях разрешения хоста не требуются. Вот некоторые из них:

  • Использование API chrome.tabs для доступа к вкладкам и их изменения, включая доступ к URL вкладки, если у вас есть разрешение tabs.
  • Взаимодействие с браузером с помощью API chrome.debugger.
  • Разрешить внедрение скрипта контента, объявленного в манифесте.

Разрешения с предупреждениями

Если расширение запрашивает несколько разрешений, многие из которых вызывают предупреждения при установке, пользователь увидит список предупреждений, как в следующем примере:

Предупреждения о разрешениях расширения при установке

Пользователи больше доверяют расширениям, которые не вызывают предупреждений или запрашивают разрешения с объяснением. Чтобы не пугать пользователей, запрашивайте необязательные разрешения или используйте менее мощный API. Рекомендации по работе с предупреждениями приведены в руководстве по предупреждениям о разрешениях. Предупреждения, относящиеся к конкретным разрешениям, перечислены в справочном списке разрешений.

Добавление или изменение шаблонов соответствия в полях "host_permissions" и "content_scripts.matches" файла манифеста также приведет к появлению предупреждения. Подробнее о том, как изменить разрешения…

Открыть доступ

Если расширение должно работать с URL file:// или в режиме инкогнито, пользователи должны предоставить ему доступ на странице сведений. Инструкции по открытию страницы сведений можно найти в разделе Как управлять расширениями.

Разрешить доступ к URL файлов и страницам в режиме инкогнито

  1. Нажмите правой кнопкой мыши на значок расширения в Chrome.
  2. Выберите Управление расширениями.

    Контекстное меню расширения
    Меню расширений
  3. Прокрутите вниз, чтобы разрешить доступ к URL файлов или режиму инкогнито.

    Разрешите доступ к URL файлов и режим инкогнито на странице сведений о расширении.
    Доступ к URL файлов и режиму инкогнито включен.

Чтобы определить, разрешил ли пользователь доступ, вызовите extension.isAllowedIncognitoAccess() или extension.isAllowedFileSchemeAccess().