Spec-Zone.ru › Web Extensions

Разрешения

Тип Array
Обязательно Нет
Версия манифеста 2 или выше
Пример
"permissions": [
  "webRequest"
]

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

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

Сведения о том, как тестировать и просматривать запросы разрешений, см. на сайте Extension Workshop в разделе Тестирование запросов разрешений.

Ключ может содержать три вида разрешений:

  • разрешения хоста (только для манифеста V2, разрешения хоста указаны в ключе манифеста host_permissions для манифеста V3 или выше);
  • разрешения API;
  • разрешение activeTab.

Разрешения хоста

Примечание: При использовании манифеста V3 или выше разрешения хоста должны быть указаны в ключе манифеста host_permissions.

Разрешения хоста задаются как маски соответствия, и каждая маска определяет группу URL-адресов, для которых расширение запрашивает дополнительные привилегии. Например, разрешение хоста может быть "*://developer.mozilla.org/*".

Дополнительные привилегии включают:

  • XMLHttpRequest и fetch доступ к этим источникам без ограничений между источниками (даже для запросов, выполненных из скриптов содержимого)
  • возможность чтения метаданных, специфичных для вкладки, без разрешения «вкладки», таких как свойства url, title и favIconUrl объектов tabs.Tab
  • возможность программно вставлять скрипты (используя tabs.executeScript()) в страницы, серверные из этих источников
  • возможность получения событий от API webrequest для этих хостов
  • возможность доступа к файлам cookie для данного хоста с помощью API cookies, при условии, что также включено разрешение API "cookies".
  • обход защиты от отслеживания для страниц расширения, где хост задан как полный домен или с подстановкой. Однако скрипты содержимого могут обойти защиту от отслеживания только для хостов, указанных с полным доменом.

В Firefox, начиная с версии 56, расширения автоматически получают разрешения хоста для своего собственного источника, который имеет вид:

moz-extension://60a20a9b-1ad4-af49-9b6c-c64c98c37920/

где 60a20a9b-1ad4-af49-9b6c-c64c98c37920 — внутренний идентификатор расширения. Расширение может получить этот URL программно, вызвав extension.getURL():

browser.extension.getURL("");
// moz-extension://60a20a9b-1ad4-af49-9b6c-c64c98c37920/

Разрешения API

Разрешения API указываются как ключевые слова, и каждое ключевое слово обозначает API WebExtension, который расширение хочет использовать.

Эти разрешения доступны в манифесте V2 и выше, если не указано иное:

  • activeTab
  • alarms
  • background
  • bookmarks
  • browserSettings
  • browsingData
  • captivePortal
  • clipboardRead
  • clipboardWrite
  • contentSettings
  • contextMenus
  • contextualIdentities
  • cookies
  • debugger
  • declarativeNetRequest
  • declarativeNetRequestFeedback
  • declarativeNetRequestWithHostAccess
  • dns
  • downloads
  • downloads.open
  • find
  • geolocation
  • history
  • identity
  • idle
  • management
  • menus
  • menus.overrideContext
  • nativeMessaging
  • notifications
  • pageCapture
  • pkcs11
  • privacy
  • proxy
  • scripting
  • search
  • sessions
  • storage
  • tabHide
  • tabs
  • theme
  • topSites
  • unlimitedStorage
  • webNavigation
  • webRequest
  • webRequestBlocking
  • webRequestFilterResponse
  • webRequestFilterResponse.serviceWorkerScript

В большинстве случаев разрешение просто предоставляет доступ к API, за исключением следующих случаев:

  • tabs предоставляет доступ к privileged parts of the tabs API без необходимости разрешений хоста: Tab.url, Tab.title и Tab.faviconUrl.
    • В Firefox 85 и более ранних версиях вам также требуется tabs, если вы хотите включить url в параметр queryInfo для tabs.query(). Остальной API tabs можно использовать без запроса разрешений.
    • Начиная с Firefox 86 и Chrome 50, можно использовать соответствия разрешений хоста вместо разрешения «вкладки».
  • webRequestBlocking позволяет использовать аргумент "blocking", поэтому вы можете modify and cancel requests.
  • downloads.open позволяет использовать API downloads.open().
  • tabHide позволяет использовать API tabs.hide().

Разрешение activeTab

Это разрешение задаётся как "activeTab". Если у расширения есть разрешение activeTab, то при взаимодействии пользователя с расширением расширению предоставляются дополнительные привилегии только для активной вкладки.

«Взаимодействие пользователя» включает:

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

Дополнительные привилегии:

  • Возможность вставки JavaScript или CSS в вкладку программно, используя browser.tabs.executeScript() и browser.tabs.insertCSS()
  • Доступ к привилегированным частям API вкладок для текущей вкладки: Tab.url, Tab.title и Tab.faviconUrl.

Цель этого разрешения — позволить расширениям выполнять распространённый сценарий использования без предоставления им очень мощных разрешений. Многие расширения хотят «сделать что-то с текущей страницей, когда пользователь попросит».

Например, рассмотрим расширение, которое хочет выполнить скрипт на текущей странице, когда пользователь нажимает действие расширения в строке браузера. Если бы разрешение activeTab не существовало, расширению потребовалось бы запросить разрешение хоста <all_urls>. Но это даёт расширению больше прав, чем ему нужно: теперь оно может выполнять скрипты в любой вкладке, в любое время, а не только в активной вкладке и только в ответ на действие пользователя.

Примечание: Вы можете получить доступ только к вкладке/данным, которые были там, когда произошло взаимодействие с пользователем (например, щелчок). Когда активная вкладка переходит на другую страницу (например, из-за завершения загрузки или какого-либо другого события), разрешение больше не предоставляет вам доступ к вкладке.

Обычно вкладке, которой предоставлено разрешение activeTab, является только текущая активная вкладка, за исключением одного случая. API menus позволяет расширению создавать пункт меню, который отображается, если пользователь нажимает правую кнопку мыши на вкладке (то есть на элементе в строке вкладок, который позволяет пользователю переключаться с одной вкладки на другую).

Если пользователь нажимает такой элемент, то разрешение activeTab предоставляется для вкладки, на которую пользователь нажал, даже если она не является активной вкладкой (начиная с Firefox 63, ошибка Firefox 1446956).

Доступ к буферу обмена

Существует два разрешения, которые позволяют расширению взаимодействовать с буфером обмена:

clipboardWrite

Запись в буфер обмена с использованием Clipboard.write(), Clipboard.writeText(), document.execCommand("copy") или document.execCommand("cut")

clipboardRead

Чтение из буфера обмена с использованием Clipboard.read(), Clipboard.readText() или document.execCommand("paste")

См. Взаимодействие с буфером обмена для получения дополнительной информации.

END_OF_DOCUMENT_MARKER

Неограниченное хранилище

Разрешение unlimitedStorage:

  • Разрешает расширениям превышать любые квоты, накладываемые API storage.local
  • В Firefox, разрешает расширениям создавать "постоянную" базу данных IndexedDB без запроса разрешения у пользователя при её создании.

Пример

 "permissions": ["*://developer.mozilla.org/*"]

Только в Manifest V2 запрашивайте привилегированный доступ к страницам под developer.mozilla.org.

  "permissions": ["tabs"]

Запрашивайте доступ к привилегированным частям API tabs.

  "permissions": ["*://developer.mozilla.org/*", "tabs"]

Только в Manifest V2 запрашивайте оба вышеперечисленных разрешения.

Совместимость с браузерами

Рабочий стол Мобильный
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari на IOS Samsung Internet
permissions Да 14 48 ? Да 14 ? ? 48 ? 15 ?
activeTab Да 79 48 ? Да 14 ? ? 48 ? 15 ?
alarms Да 79 48 ? Да 14 ? ? 48 ? 15 ?
background 10 79 Нет ? Нет Нет ? ? Нет ? Нет ?
bookmarks Да 15 48 ? Да Нет ? ? Нет ? Нет ?
browserSettings Нет Нет 56 ? Нет Нет ? ? 56 ? Нет ?
browsingData Да 79 53 ? Да Нет ? ? 8556–79 ? Нет ?
captivePortal Нет Нет 68 ? Нет Нет ? ? Нет ? Нет ?
clipboardRead Да 79 54 ? Да Нет ? ? 54 ? Нет ?
clipboardWrite Да 79 51 ? Да 14 ? ? 51 ? 15 ?
contentSettings Да 79 Нет ? Да Нет ? ? Нет ? Нет ?
contextMenus Да 14
55Available as an alias to the menus permission.
? Да
14Available as an alias to the menus permission.
? ? Нет ? Нет ?
contextualIdentities Нет Нет 53 ? Нет Нет ? ? 53 ? Нет ?
cookies Да 14 48 ? Да 14 ? ? 48 ? 15 ?
debugger Да 79 Нет ? Да Нет ? ? Нет ? Нет ?
declarativeNetRequest 84 84 Нет ? 70 15 ? ? Нет ? 15 ?
declarativeNetRequestFeedback
84Available only to unpacked extensions.
84Available only to unpacked extensions.
Нет ?
70Available only to unpacked extensions.
15.4 ? ? Нет ? 15.4 ?
declarativeNetRequestWithHostAccess 84 84 Нет ? 70 16 ? ? Нет ? 16 ?
dns Нет Нет 60 ? Нет Нет ? ? 60 ? Нет ?
downloads Да 79 48 ? Да Нет ? ? 48 ? Нет ?
downloads_open Да 79 48 ? Да Нет ? ? 48 ? Нет ?
find Нет Нет 57 ? Нет Нет ? ? Нет ? Нет ?
geolocation Да 14 54 ? Да Нет ? ? 54 ? Нет ?
history Да 79 49 ? Да Нет ? ? Нет ? Нет ?
identity Да 79 53 ? Да Нет ? ? Нет ? Нет ?
idle Да 15 48 ? Да Нет ? ? 48 ? Нет ?
management Да 79 51 ? Да Нет ? ? 51 ? Нет ?
menus Нет Нет 53 ? Нет 14 ? ? Нет ? Нет ?
nativeMessaging 29 15 50 ? 16 14 ? ? Нет ? 15 ?
notifications 5 79 48 ? 25 Нет ? ? 48 ? Нет ?
pageCapture Да 79 Нет ? Да Нет ? ? Нет ? Нет ?
pkcs11 Нет Нет 58 ? Нет Нет ? ? Нет ? Нет ?
privacy Да 79 54 ? Да Нет ? ? 54 ? Нет ?
proxy 33 79 55 ? Нет Нет ? ? 55 ? Нет ?
search Нет Нет 63 ? Нет Нет ? ? Нет ? Нет ?
sessions Да 79 52 ? Да Нет ? ? Нет ? Нет ?
storage Да 14 48 ? Да 14 ? ? 48 ? 15 ?
tabHide Нет Нет 61 ? Нет Нет ? ? Нет ? Нет ?
tabs Да 14 48 ? Да 14 ? ? 54 ? 15 ?
theme Нет Нет 55 ? Нет Нет ? ? Нет ? Нет ?
topSites Да 79 52 ? Да Нет ? ? 52 ? Нет ?
unlimitedStorage Да 14 56 ? Нет
16С Safari 16, квота хранилища не ограничена.
14Не предоставляет неограниченную квоту хранилища. Вместо стандартной квоты в 5 МБ, предоставляет квоту в 10 МБ.
? ? 56 ?
16С Safari 16, квота хранилища не ограничена.
15Не предоставляет неограниченную квоту хранилища. Вместо стандартной квоты в 5 МБ, предоставляет квоту в 10 МБ.
?
webNavigation Да 14 48 ? 17 14 ? ? 48 ? 15 ?
webRequest Да 14 48 ? Да 14 ? ? 48 ? Нет ?
webRequestBlocking Да 14 48 ? Да Нет ? ? 48 ? Нет ?
webRequestFilterResponse Нет Нет 110 ? Нет Нет ? ? 110 ? Нет ?
webRequestFilterResponse_serviceWorkerScript Нет Нет 95 ? Нет Нет ? ? 95 ? Нет ?

© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API