chrome.permissions

Описание

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

Концепции и использование

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

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

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

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

Предупреждение о расширении для 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 .
"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 в манифесте, а также те, которые связаны со скриптами содержимого .

  • разрешения

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

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

Методы

addHostAccessRequest()

Chrome 133+ MV3+
chrome.permissions.addHostAccessRequest(
  request: object,
)
: Promise<void>

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

Параметры

  • запрос

    объект

    • documentId

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

      Идентификатор документа, в котором могут отображаться запросы на доступ к хосту. Должен быть документом верхнего уровня на вкладке. Если указан, запрос отображается на вкладке указанного документа и удаляется при переходе документа на новый источник. Добавление нового запроса переопределит любой существующий запрос для tabId . Необходимо указать этот или tabId .

    • шаблон

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

      Шаблон URL, по которому могут отображаться запросы на доступ к хосту. Если он указан, запросы на доступ к хосту будут отображаться только по URL, соответствующим этому шаблону.

    • tabId

      номер необязательно

      Идентификатор вкладки, на которой могут отображаться запросы на доступ к хосту. Если этот идентификатор указан, запрос отображается на указанной вкладке и удаляется при переходе вкладки на новый источник. Добавление нового запроса переопределит существующий запрос для documentId . Необходимо указать этот или documentId .

Возврат

  • Обещание<void>

contains()

chrome.permissions.contains(
  permissions: Permissions,
)
: Promise<boolean>

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

Параметры

Возврат

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

    Хром 96+

getAll()

chrome.permissions.getAll(): Promise<Permissions>

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

Возврат

remove()

chrome.permissions.remove(
  permissions: Permissions,
)
: Promise<boolean>

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

Параметры

Возврат

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

    Хром 96+

removeHostAccessRequest()

Chrome 133+ MV3+
chrome.permissions.removeHostAccessRequest(
  request: object,
)
: Promise<void>

Удаляет запрос на доступ к хосту, если таковой имеется.

Параметры

  • запрос

    объект

    • documentId

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

      Идентификатор документа, из которого будет удалён запрос на доступ к хосту. Должен быть документом верхнего уровня на вкладке. Необходимо указать этот идентификатор или tabId .

    • шаблон

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

      Шаблон URL, из которого будет удалён запрос на доступ к хосту. Если он указан, он должен точно соответствовать шаблону существующего запроса на доступ к хосту.

    • tabId

      номер необязательно

      Идентификатор вкладки, в которой будет удалён запрос на доступ к хосту. Необходимо указать этот идентификатор или documentId .

Возврат

  • Обещание<void>

request()

chrome.permissions.request(
  permissions: Permissions,
)
: Promise<boolean>

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

Параметры

Возврат

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

    Хром 96+

События

onAdded

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

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

Параметры

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

    функция

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

    (permissions: Permissions) => void

onRemoved

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

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

Параметры

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

    функция

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

    (permissions: Permissions) => void