Разрешения
| Тип | 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 и выше, если не указано иное:
activeTabalarmsbackgroundbookmarksbrowserSettingsbrowsingDatacaptivePortalclipboardReadclipboardWritecontentSettingscontextMenuscontextualIdentitiescookiesdebuggerdeclarativeNetRequestdeclarativeNetRequestFeedbackdeclarativeNetRequestWithHostAccessdnsdownloadsdownloads.openfindgeolocationhistoryidentityidlemanagementmenusmenus.overrideContextnativeMessagingnotificationspageCapturepkcs11privacyproxyscriptingsearchsessionsstoragetabHidetabsthemetopSitesunlimitedStoragewebNavigationwebRequestwebRequestBlockingwebRequestFilterResponsewebRequestFilterResponse.serviceWorkerScript
В большинстве случаев разрешение просто предоставляет доступ к API, за исключением следующих случаев:
tabsпредоставляет доступ кprivileged parts of theбез необходимости разрешений хоста:tabsAPITab.url,Tab.titleиTab.faviconUrl.- В Firefox 85 и более ранних версиях вам также требуется
tabs, если вы хотите включитьurlв параметрqueryInfoдляtabs.query(). Остальной APItabsможно использовать без запроса разрешений. - Начиная с Firefox 86 и Chrome 50, можно использовать соответствия разрешений хоста вместо разрешения «вкладки».
- В Firefox 85 и более ранних версиях вам также требуется
webRequestBlockingпозволяет использовать аргумент"blocking", поэтому вы можетеmodify and cancel requests.downloads.openпозволяет использовать APIdownloads.open().tabHideпозволяет использовать APItabs.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")
См. Взаимодействие с буфером обмена для получения дополнительной информации.
Неограниченное хранилище
Разрешение 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 themenus permission. |
? | Да | 14Available as an alias to themenus 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