Permissions API - 查询当前上下文的 API 权限的状态
Permissions API 提供了一种一致的编程方式来查询归属于当前上下文的 API 权限的状态。例如,权限 API 可用于确定是否已授予或拒绝访问特定 API 的权限。
注意:此功能在 Web Workers 中可用(虽然不是当前版本的 Firefox,因为 WorkerNavigator.permissions 没有实现)。
概念和用法
历史上,不同的 API 处理自己的权限不一致 —— 例如,Notifications API 允许显式检查权限状态和请求权限,而 Geolocation API 没有(如果用户拒绝初始权限请求会导致问题)。权限 API 提供的工具允许开发人员在权限方面实现更好的用户体验。
(which causes problems if the user denied the initial permission request).
permissions
属性已在 Navigator
对象上可用,无论是在标准浏览上下文还是工作线程上下文 (WorkerNavigator
- 因此权限检查在工作线程内可用),并返回一个 Permissions
对象,该对象提供对权限 API 功能的访问。
拥有此对象后,您就可以执行与权限相关的任务,例如使用 Permissions.query()
方法查询权限以返回使用 PermissionStatus
用于特定的 API。
并非所有 API 的权限状态都可以使用 Permissions API 进行查询。可以使用权限功能的知名 API 包括:
- Clipboard API
- Notifications API
- Push API
- Web MIDI API
随着时间的推移,更多 API 将可以通过 Permissions API 调用。
实例
我们提供了一个名为 Location Finder 的简单实例。您可以实时运行示例,或在 Github 上查看源代码。
在我们的文章使用权限 API 中阅读有关其工作原理的更多信息。
接口
Navigator.permissions
和 WorkerNavigator.permissions
只读
分别从主上下文和工作线程上下文提供对 Permissions
对象的访问。
Permissions
提供核心权限 API 功能,例如查询和撤销权限的方法。
PermissionStatus
提供对权限当前状态的访问,以及响应权限状态变化的事件处理程序。
规范
规范 |
---|
Permissions |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 43 | 79 | 46 | 不支持 | 30 | 16 |
accelerometer 权限 | 62 | 79 | 不支持 | 不支持 | 49 | 不支持 |
accessibility-events 权限 | 62 | 79 | 不支持 | 不支持 | 49 | 不支持 |
ambient-light-sensor 权限 | 62 | 79 | 不支持 | 不支持 | 49 | 不支持 |
background-sync 权限 | 62 | 79 | 不支持 | 不支持 | 49 | 不支持 |
camera 权限 | 64 | 79 | 不支持 | 不支持 | 51 | 不支持 |
clipboard-read 权限 | 64 | 79 | 不支持 | 不支持 | 51 | 不支持 |
clipboard-write 权限 | 64 | 79 | 不支持 | 不支持 | 51 | 不支持 |
geolocation 权限 | 43 | 79 | 46 | 不支持 | 30 | 不支持 |
gyroscope 权限 | 51 | 79 | 不支持 | 不支持 | 38 | 不支持 |
magnetometer 权限 | 62 | 79 | 不支持 | 不支持 | 49 | 不支持 |
microphone 权限 | 64 | 79 | 不支持 | 不支持 | 51 | 不支持 |
midi 权限 | 43 | 79 | 不支持 | 不支持 | 30 | 不支持 |
notifications 权限 | 43 | 79 | 46 | 不支持 | 30 | 不支持 |
payment-handler 权限 | 66 | 79 | 不支持 | 不支持 | 53 | 不支持 |
persistent-storage 权限 | 71 | 79 | 53 | 不支持 | 58 | 不支持 |
push 权限 | 43 | 79 | 46 | 不支持 | 30 | 不支持 |
query | 43 | 79 | 46 | 不支持 | 30 | 16 |
request | 46 | 79 | 不支持 | 不支持 | 33 | 不支持 |
requestAll | 48 | 79 | 不支持 | 不支持 | 35 | 不支持 |
revoke | 46 | 79 | 51 47 — 51 | 不支持 | 33 | 不支持 |
speaker-selection 权限 | 不支持 | 不支持 | 92 | 不支持 | 不支持 | 不支持 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 不支持1 | 43 | 未知 | 46 | 未知 | 30 | 16 |
accelerometer 权限 | 不支持 | 62 | 未知 | 不支持 | 未知 | 46 | 不支持 |
accessibility-events 权限 | 不支持 | 62 | 未知 | 不支持 | 未知 | 46 | 不支持 |
ambient-light-sensor 权限 | 不支持 | 62 | 未知 | 不支持 | 未知 | 46 | 不支持 |
background-sync 权限 | 不支持 | 62 | 未知 | 不支持 | 未知 | 46 | 不支持 |
camera 权限 | 不支持 | 64 | 未知 | 不支持 | 未知 | 47 | 不支持 |
clipboard-read 权限 | 不支持 | 64 | 未知 | 不支持 | 未知 | 47 | 不支持 |
clipboard-write 权限 | 不支持 | 64 | 未知 | 不支持 | 未知 | 47 | 不支持 |
geolocation 权限 | 不支持 | 43 | 未知 | 46 | 未知 | 30 | 不支持 |
gyroscope 权限 | 不支持 | 51 | 未知 | 不支持 | 未知 | 41 | 不支持 |
magnetometer 权限 | 不支持 | 62 | 未知 | 不支持 | 未知 | 46 | 不支持 |
microphone 权限 | 不支持 | 64 | 未知 | 不支持 | 未知 | 47 | 不支持 |
midi 权限 | 不支持 | 43 | 未知 | 不支持 | 未知 | 30 | 不支持 |
notifications 权限 | 不支持 | 43 | 未知 | 46 | 未知 | 30 | 不支持 |
payment-handler 权限 | 不支持 | 66 | 未知 | 不支持 | 未知 | 47 | 不支持 |
persistent-storage 权限 | 不支持 | 71 | 未知 | 53 | 未知 | 50 | 不支持 |
push 权限 | 不支持 | 43 | 未知 | 46 | 未知 | 30 | 不支持 |
query | 不支持 | 43 | 未知 | 46 | 未知 | 30 | 16 |
request | 不支持 | 46 | 未知 | 不支持 | 未知 | 不支持 | 不支持 |
requestAll | 不支持 | 48 | 未知 | 不支持 | 未知 | 不支持 | 不支持 |
revoke | 不支持 | 46 | 未知 | 47 — 51 | 未知 | 不支持 | 不支持 |
speaker-selection 权限 | 不支持 | 不支持 | 未知 | 92 | 未知 | 不支持 | 不支持 |
1. See bug 490120.