chrome.permissions

Описание

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

Обзор

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

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

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

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

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

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

Шаг 1: Определите, какие разрешения являются обязательными, а какие — необязательными.

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

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

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

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

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

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

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

Укажите необязательные разрешения в манифесте расширения с помощью ключа optional_permissions , используя тот же формат, что и поле 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 .
"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 в манифесте, а также те, которые связаны с Content Scripts .

  • разрешения

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

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

Методы

contains()

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

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

Параметры

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

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

    Параметр callback выглядит следующим образом:

    (result: boolean) => void

    • результат

      логический

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

Возвраты

  • Promise<boolean>

    Chrome 96+

    Поддержка промисов доступна только для Manifest V3 и более поздних версий; для других платформ необходимо использовать колбэки.

getAll()

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

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

Параметры

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

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

    Параметр callback выглядит следующим образом:

    (permissions: Permissions) => void

    • разрешения

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

Возвраты

  • Promise< Permissions >

    Chrome 96+

    Поддержка промисов доступна только для Manifest V3 и более поздних версий; для других платформ необходимо использовать колбэки.

remove()

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

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

Параметры

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

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

    Параметр callback выглядит следующим образом:

    (removed: boolean) => void

    • удаленный

      логический

      Верно, если разрешения были сняты.

Возвраты

  • Promise<boolean>

    Chrome 96+

    Поддержка промисов доступна только для Manifest V3 и более поздних версий; для других платформ необходимо использовать колбэки.

request()

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

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

Параметры

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

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

    Параметр callback выглядит следующим образом:

    (granted: boolean) => void

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

      логический

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

Возвраты

  • Promise<boolean>

    Chrome 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

,

Описание

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

Обзор

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

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

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

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

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

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

Шаг 1: Определите, какие разрешения являются обязательными, а какие — необязательными.

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

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

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

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

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

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

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

Укажите необязательные разрешения в манифесте расширения с помощью ключа optional_permissions , используя тот же формат, что и поле 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 .
"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 в манифесте, а также те, которые связаны с Content Scripts .

  • разрешения

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

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

Методы

contains()

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

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

Параметры

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

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

    Параметр callback выглядит следующим образом:

    (result: boolean) => void

    • результат

      логический

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

Возвраты

  • Promise<boolean>

    Chrome 96+

    Поддержка промисов доступна только для Manifest V3 и более поздних версий; для других платформ необходимо использовать колбэки.

getAll()

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

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

Параметры

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

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

    Параметр callback выглядит следующим образом:

    (permissions: Permissions) => void

    • разрешения

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

Возвраты

  • Promise< Permissions >

    Chrome 96+

    Поддержка промисов доступна только для Manifest V3 и более поздних версий; для других платформ необходимо использовать колбэки.

remove()

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

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

Параметры

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

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

    Параметр callback выглядит следующим образом:

    (removed: boolean) => void

    • удаленный

      логический

      Верно, если разрешения были сняты.

Возвраты

  • Promise<boolean>

    Chrome 96+

    Поддержка промисов доступна только для Manifest V3 и более поздних версий; для других платформ необходимо использовать колбэки.

request()

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

Requests access to the specified permissions, displaying a prompt to the user if necessary. These permissions must either be defined in the optional_permissions field of the manifest or be required permissions that were withheld by the user. Paths on origin patterns will be ignored. You can request subsets of optional origin permissions; for example, if you specify *://*\/* in the optional_permissions section of the manifest, you can request http://example.com/ . If there are any problems requesting the permissions, the promise will be rejected.

Параметры

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

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

    Параметр callback выглядит следующим образом:

    (granted: boolean) => void

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

      логический

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

Возвраты

  • Promise<boolean>

    Chrome 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