API разрешений
Примечание: Эта функция доступна в Потоках веб-работы.
API разрешений предоставляет согласованный программно-ориентированный способ запроса статуса разрешений API, присвоенных текущему контексту, например, веб-странице или потоку. Например, его можно использовать для определения того, было ли разрешение на доступ к определенной функции или API предоставлено, отклонено или требует специального разрешения пользователя.
Концепции и использование
Исторически разные API обрабатывают свои разрешения несовместимым образом — например, API уведомлений предоставлял собственные методы для запроса разрешений и проверки статуса разрешений, в то время как API геолокации этого не делал. API разрешений предоставляет инструменты для разработчиков, чтобы реализовать согласованный пользовательский опыт работы с разрешениями.
Разрешения из этого API эффективно агрегируют все ограничения безопасности для контекста, включая любое требование к API для использования в защищенном контексте, ограничения Permissions-Policy, примененные к документу, требования к взаимодействию с пользователем и запросы у пользователя. Таким образом, например, если API ограничен политикой разрешений, возвращаемое разрешение будет denied и пользователь не будет приглашен для предоставления доступа.
Свойство permissions стало доступно в объекте Navigator, как в стандартном контексте браузера, так и в контексте потока (WorkerNavigator — поэтому проверка разрешений доступна внутри потоков), и возвращает объект Permissions, который предоставляет доступ к функциональности API разрешений.
После получения этого объекта вы можете использовать метод Permissions.query(), чтобы вернуть промис, который разрешается со статусом PermissionStatus для определенного API.
Запрос разрешения
Если статус разрешения prompt, пользователь должен подтвердить запрос, чтобы предоставить доступ к функции.
Механизм, который запускает этот запрос, будет зависеть от конкретного API — он не определен как часть API разрешений. Обычно триггером является код, вызывающий метод для доступа или открытия функции, или код, регистрирующий обработчик уведомлений от функции, которая затем будет к ней обращаться.
Обратите внимание, что не все функции требуют запроса. Разрешение может быть предоставлено Permission Policy, неявно путем временного включения или с помощью какого-либо другого механизма.
Отмена разрешения
Отмена разрешения не управляется API. Более конкретно, метод Permissions.revoke() был предложен, но с тех пор был удален из тех браузеров, где он был реализован.
Пользователи могут вручную отменить разрешение для определенных сайтов, используя настройки браузера:
- Firefox: Меню > Настройки > Конфиденциальность и безопасность > Разрешения (затем выберите кнопку Настройки для интересующего разрешения).
- Chrome: Меню > Настройки > Дополнительные настройки. В разделе Конфиденциальность нажмите Настройки контента. В открывшемся диалоговом окне найдите раздел Местоположение и выберите Спрашивать, когда сайт пытается…. Наконец, нажмите Управление исключениями и удалите разрешения, предоставленные сайтам, которые вас интересуют.
API, учитывающие разрешения
Не все статусы разрешений API могут быть запрошены с помощью API разрешений. Неполный список API, учитывающих разрешения, включает:
-
API фоновой синхронизации:
background-sync(должно быть всегда предоставлено) -
Clipboard_API:
clipboard-read,clipboard-write -
API вычислительной нагрузки:
compute-pressure -
API геолокации:
geolocation -
API доступа к локальным шрифтам:
local-fonts -
API захвата медиа и потоков:
microphone,camera -
API уведомлений:
notifications -
API обработчика платежей:
payment-handler -
API push-уведомлений:
push -
API блокировки экрана:
screen-wake-lock -
API датчиков:
accelerometer,gyroscope,magnetometer,ambient-light-sensor -
API доступа к хранилищу:
storage-access,top-level-storage-access -
API хранилища:
persistent-storage -
API Bluetooth:
bluetooth -
API MIDI:
midi -
API управления окнами:
window-management
Интерфейсы
Permissions-
Предоставляет основную функциональность API разрешений, такие как методы для запроса и отмены разрешений.
PermissionStatus-
Предоставляет доступ к текущему статусу разрешения и обработчику событий для реагирования на изменения статуса разрешения.
Расширения для других интерфейсов
-
Предоставляет доступ к объекту
Permissionsсоответственно из основного контекста и контекста потока.
Примеры
Мы создали пример под названием Поиск местоположения. Вы можете запустить пример онлайн, просмотреть исходный код на GitHub или узнать больше о его работе в нашей статье Использование API разрешений.
Пример Permissions.query() также показывает код, который тестирует большинство разрешений в текущем браузере и записывает результат.
Спецификации
| Спецификация |
|---|
| Разрешения |
Совместимость с браузерами
| Десктоп | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
Permissions_API |
43 | 79 | 133 | 30 | 16.4 | 43 | 133 | 30 | 16.4 | 4.0 | Нет |
| Десктоп | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
Permissions_API |
43 | 79 | 46 | 30 | 16 | 43 | 46 | 30 | 16 | 4.0 | Нет |
| Десктоп | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
Permissions_API |
43 | 79 | 46 | 30 | 16 | 43 | 46 | 30 | 16 | 4.0 | Нет |
|---|---|---|---|---|---|---|---|---|---|---|---|
permission_accelerometer |
62 | 79 | Нет | 49 | Нет | 62 | Нет | 46 | Нет | 8.0 | Нет |
permission_accessibility-events |
62 | 79 | Нет | 49 | Нет | 62 | Нет | 46 | Нет | 8.0 | Нет |
permission_ambient-light-sensor |
62 | 79 | Нет | 49 | Нет | 62 | Нет | Нет | Нет | Нет | Нет |
permission_background-sync |
62 | 79 | Нет | 49 | Нет | 62 | Нет | 46 | Нет | 8.0 | Нет |
permission_camera |
64 | 79 | 132 | 51 | 16 | 64 | 132 | 47 | 16 | 9.0 | Нет |
permission_clipboard-read |
64 | 79 | Нет | 51 | Нет | 64 | Нет | 47 | Нет | 9.0 | Нет |
permission_clipboard-write |
64 | 79 | Нет | 51 | Нет | 64 | Нет | 47 | Нет | 9.0 | Нет |
permission_compute-pressure |
125 | 125 | Нет | 111 | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
permission_geolocation |
43 | 79 | 46 | 30 | 16 | 43 | 46 | 30 | 16 | 4.0 | Нет |
permission_gyroscope |
51 | 79 | Нет | 38 | Нет | 51 | Нет | 41 | Нет | 5.0 | Нет |
permission_local-fonts |
103 | 103 | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
permission_magnetometer |
62 | 79 | Нет | 49 | Нет | 62 | Нет | 46 | Нет | 8.0 | Нет |
permission_microphone |
64 | 79 | 132 | 51 | 16 | 64 | 132 | 47 | 16 | 9.0 | Нет |
permission_midi |
43 | 79 | 110 | 30 | Нет | 43 | 110 | 30 | Нет | 4.0 | Нет |
permission_notifications |
43 | 79 | 46Alias for thepush permission (returns the same value). |
30 | 16.4 | 43 | 46Alias for thepush permission (returns the same value). |
30 | 16.4 | 4.0 | Нет |
permission_payment-handler |
66 | 79 | Нет | 53 | Нет | 66 | Нет | 47 | Нет | 9.0 | Нет |
permission_persistent-storage |
71 | 79 | 53 | 58 | Нет | 71 | 53 | 50 | Нет | 10.0 | Нет |
permission_push |
43 | 79 | 46Alias for thenotifications permission (returns the same value). |
30 | 16.5 | 43 | 46Alias for thenotifications permission (returns the same value). |
30 | 16.5 | 4.0 | Нет |
permission_screen-wake-lock |
84 | 84 | 126 | 70 | Нет | 84 | 126 | 60 | Нет | 14.0 | Нет |
permission_storage-access |
119 | 85 | 117 | 105 | Нет | 120 | 117 | 80 | Нет | 25.0 | Нет |
permission_top-level-storage-access |
113 | 113 | Нет | 99 | Нет | 120 | Нет | 80 | Нет | 25.0 | Нет |
permission_window-management |
111 | 111 | Нет | 97 | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
query |
43 | 79 | 46 | 30 | 16 | 43 | 46 | 30 | 16 | 4.0 | Нет |
request |
46 | 79 | Нет | 33 | Нет | 46 | Нет | Нет | Нет | Нет | Нет |
requestAll |
48 | 79 | Нет | 35 | Нет | 48 | Нет | Нет | Нет | Нет | Нет |
revoke |
46 | 79 | 5147–51 | 33 | Нет | 46 | 47–51 | Нет | Нет | Нет | Нет |
|---|
api.Разрешения
Таблицы BCD загружаются только в браузере
api.Навигатор.разрешения
Таблицы BCD загружаются только в браузере
api.РабочийНавигатор.разрешения
Таблицы BCD загружаются только в браузере
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Permissions_API