Описание
Используйте API chrome.permissions
для запроса объявленных необязательных разрешений во время выполнения, а не во время установки, чтобы пользователи понимали, зачем нужны разрешения, и предоставляли только необходимые.
Обзор
Предупреждения о разрешениях предназначены для описания возможностей, предоставляемых API, но некоторые из них могут быть неочевидны. 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
- разрешения