chrome.permissions

Описание

Используйте API chrome.permissions для запроса объявленных необязательных разрешений во время выполнения, а не во время установки, чтобы пользователи понимали, зачем нужны разрешения, и предоставляли только необходимые.

Обзор

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

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

Кнопка расширения, включающая дополнительные функции

Для отображения самых популярных сайтов пользователя требуется разрешение topSites , которое имеет следующее предупреждение.

Предупреждение о расширении для API topSites

Реализация необязательных разрешений

Шаг 1: Решите, какие разрешения необходимы, а какие необязательны.

Расширение может объявлять как обязательные, так и необязательные разрешения. В общем случае следует:

  • Используйте требуемые разрешения, когда они необходимы для основных функций вашего расширения.
  • Используйте дополнительные разрешения, когда они необходимы для дополнительных функций вашего расширения.

Преимущества необходимых разрешений:

  • Меньше запросов: расширение может один раз запросить у пользователя принятие всех разрешений.
  • Более простая разработка: гарантированно присутствуют все необходимые разрешения.

Преимущества дополнительных разрешений:

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

Шаг 2: Объявите необязательные разрешения в манифесте

Объявите необязательные разрешения в манифесте расширения с помощью ключа optional_permissions , используя тот же формат, что и поле разрешений :

{   "name": "My extension",   ...   "optional_permissions": ["tabs"],   "optional_host_permissions": ["https://www.google.com/"],   ... } 

Если вы хотите запрашивать хосты, которые обнаруживаются только во время выполнения, добавьте "https://*/*" в поле optional_host_permissions вашего расширения. Это позволит вам указать любой источник в Permissions.origins , если у него есть соответствующая схема.

Разрешения, которые не могут быть указаны как необязательные

Большинство разрешений расширений Chrome можно указать как необязательные, за исключением следующих.

Разрешение Описание
"debugger" API chrome.debugger служит альтернативным транспортом для протокола удаленной отладки Chrome.
"declarativeNetRequest" Предоставляет расширению доступ к API chrome.declarativeNetRequest .
"devtools" Позволяет расширить функциональность Chrome DevTools .
"experimental" Только для каналов Canary и Dev . Предоставляет расширению доступ к API chrome.experimental .
"geolocation" Позволяет расширению использовать API геолокации HTML5.
"mdns" Предоставляет расширению доступ к API chrome.mdns .
"proxy" Предоставляет расширению доступ к API chrome.proxy для управления настройками прокси-сервера Chrome.
"tts" API chrome.tts воспроизводит синтезированный текст в речь (TTS).
"ttsEngine" API chrome.ttsEngine реализует механизм преобразования текста в речь (TTS) с помощью расширения.
"wallpaper" Только для ChromeOS . Используйте API chrome.wallpaper для смены обоев ChromeOS.

Дополнительную информацию о доступных разрешениях и их предупреждениях см. в разделах Объявление разрешений и Предупреждение пользователей .

Шаг 3: Запросите дополнительные разрешения

Запросите разрешения из жеста пользователя, используя permissions.request() :

document.querySelector('#my-button').addEventListener('click', (event) => {   // Permissions must be requested from inside a user gesture, like a button's   // click handler.   chrome.permissions.request({     permissions: ['tabs'],     origins: ['https://www.google.com/']   }, (granted) => {     // The callback argument will be true if the user granted the permissions.     if (granted) {       doSomething();     } else {       doSomethingElse();     }   }); }); 

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

пример запроса на подтверждение разрешения

Шаг 4: Проверьте текущие разрешения расширения.

Чтобы проверить, имеет ли ваше расширение определенное разрешение или набор разрешений, используйте permission.contains() :

chrome.permissions.contains({   permissions: ['tabs'],   origins: ['https://www.google.com/'] }, (result) => {   if (result) {     // The extension has the permissions.   } else {     // The extension doesn't have the permissions.   } }); 

Шаг 5: Удалите разрешения

Разрешения следует удалять, когда они больше не нужны. После удаления разрешения вызов permissions.request() обычно возвращает его обратно без запроса у пользователя.

chrome.permissions.remove({   permissions: ['tabs'],   origins: ['https://www.google.com/'] }, (removed) => {   if (removed) {     // The permissions have been removed.   } else {     // The permissions have not been removed (e.g., you tried to remove     // required permissions).   } }); 

Типы

Permissions

Характеристики

  • происхождение

    строка[] необязательная

    Список разрешений хоста, включая те, которые указаны в ключах optional_permissions или permissions в манифесте, а также те, которые связаны со скриптами содержимого .

  • разрешения

    строка[] необязательная

    Список поименованных разрешений (не включает хосты и источники).

Методы

contains()

Обещать
chrome.permissions.contains(
  permissions: Permissions,
  callback?: function,
)
: Promise<boolean>

Проверяет, имеет ли расширение указанные разрешения.

Параметры

  • разрешения
  • перезвонить

    функция необязательна

    Параметр callback выглядит так:

    (result: boolean) => void

    • результат

      булев

      True, если у расширения есть указанные разрешения. Если источник указан и как необязательное разрешение, и как шаблон соответствия скрипту контента, будет возвращено false если не предоставлены оба разрешения.

Возврат

  • Обещание<логическое>

    Хром 96+

    Обещания поддерживаются только для Manifest V3 и более поздних версий, на других платформах необходимо использовать обратные вызовы.

getAll()

Обещать
chrome.permissions.getAll(
  callback?: function,
)
: Promise<Permissions>

Получает текущий набор разрешений расширения.

Параметры

  • перезвонить

    функция необязательна

    Параметр callback выглядит так:

    (permissions: Permissions) => void

    • разрешения

      Активные разрешения расширения. Обратите внимание, что свойство origins будет содержать предоставленные разрешения из тех, что указаны в ключах permissions и optional_permissions в манифесте, а также из тех, что связаны со скриптами контента .

Возврат

  • Обещание< Разрешения >

    Хром 96+

    Обещания поддерживаются только для Manifest V3 и более поздних версий, на других платформах необходимо использовать обратные вызовы.

remove()

Обещать
chrome.permissions.remove(
  permissions: Permissions,
  callback?: function,
)
: Promise<boolean>

Закрывает доступ к указанным разрешениям. При возникновении проблем с удалением разрешений будет установлена ошибка runtime.lastError .

Параметры

  • разрешения
  • перезвонить

    функция необязательна

    Параметр callback выглядит так:

    (removed: boolean) => void

    • удаленный

      булев

      True, если разрешения были удалены.

Возврат

  • Обещание<логическое>

    Хром 96+

    Обещания поддерживаются только для Manifest V3 и более поздних версий, на других платформах необходимо использовать обратные вызовы.

request()

Обещать
chrome.permissions.request(
  permissions: Permissions,
  callback?: function,
)
: Promise<boolean>

Запрашивает доступ к указанным разрешениям, при необходимости отображая пользователю запрос. Эти разрешения должны быть либо определены в поле optional_permissions манифеста, либо являться обязательными разрешениями, которые были отозваны пользователем. Пути, соответствующие шаблонам источников, будут игнорироваться. Вы можете запросить подмножества необязательных разрешений источников; например, если указать *://*\/* в разделе optional_permissions манифеста, можно запросить http://example.com/ . При возникновении проблем с запросом разрешений будет установлена ошибка runtime.lastError .

Параметры

  • разрешения
  • перезвонить

    функция необязательна

    Параметр callback выглядит так:

    (granted: boolean) => void

    • предоставленный

      булев

      True, если пользователь предоставил указанные разрешения.

Возврат

  • Обещание<логическое>

    Хром 96+

    Обещания поддерживаются только для Manifest V3 и более поздних версий, на других платформах необходимо использовать обратные вызовы.

События

onAdded

chrome.permissions.onAdded.addListener(
  callback: function,
)

Срабатывает, когда расширение получает новые разрешения.

Параметры

  • перезвонить

    функция

    Параметр callback выглядит так:

    (permissions: Permissions) => void

onRemoved

chrome.permissions.onRemoved.addListener(
  callback: function,
)

Срабатывает, когда у расширения удален доступ к разрешениям.

Параметры

  • перезвонить

    функция

    Параметр callback выглядит так:

    (permissions: Permissions) => void