Permissions API - 查询当前上下文的 API 权限的状态
Permissions API 提供了一种一致的编程方式来查询归属于当前上下文的 API 权限的状态。例如,权限 API 可用于确定是否已授予或拒绝访问特定 API 的权限。
注意:此功能在 Web Workers 中可用(虽然不是当前版本的 Firefox,因为 WorkerNavigator.permissions 没有实现)。
概念和用法
历史上,不同的 API 处理自己的权限不一致 —— 例如,Notifications API 允许显式检查权限状态和请求权限,而 Geolocation API 没有(如果用户拒绝首次权限请求,则会缓存起来)。权限 API 提供的工具允许开发人员在权限方面实现更好的用户体验。
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 | 不支持 | 支持 | 不支持 |
accelerometer 权限 | 62 | 79 | 未知 | 不支持 | 未知 | 不支持 |
accessibility-events 权限 | 62 | 79 | 未知 | 不支持 | 未知 | 不支持 |
ambient-light-sensor 权限 | 62 | 79 | 未知 | 不支持 | 未知 | 不支持 |
background-sync 权限 | 62 | 79 | 未知 | 不支持 | 未知 | 不支持 |
camera 权限 | 64 | 79 | 未知 | 不支持 | 未知 | 不支持 |
clipboard-read 权限 | 64 | 79 | 不支持 | 不支持 | 未知 | 不支持 |
clipboard-write 权限 | 64 | 79 | 不支持 | 不支持 | 未知 | 不支持 |
geolocation 权限 | 43 | 79 | 未知 | 不支持 | 30 | 不支持 |
gyroscope 权限 | 51 | 79 | 未知 | 不支持 | 未知 | 不支持 |
magnetometer 权限 | 62 | 79 | 未知 | 不支持 | 未知 | 不支持 |
microphone 权限 | 64 | 79 | 未知 | 不支持 | 未知 | 不支持 |
midi 权限 | 43 | 79 | 未知 | 不支持 | 30 | 不支持 |
notifications 权限 | 43 | 79 | 未知 | 不支持 | 30 | 不支持 |
payment-handler 权限 | 66 | 79 | 未知 | 不支持 | 未知 | 不支持 |
persistent-storage 权限 | 71 | 79 | 53 | 不支持 | 58 | 不支持 |
push 权限 | 43 | 79 | 未知 | 不支持 | 30 | 不支持 |
query | 43 | 79 | 46 | 不支持 | 支持 | 不支持 |
request | 46 | 79 | 不支持 | 不支持 | 未知 | 不支持 |
requestAll | 48 | 79 | 不支持 | 不支持 | 未知 | 不支持 |
revoke | 46 | 79 | 51 47 — 51 | 不支持 | 未知 | 不支持 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 43 | 43 | 未知 | 46 | 未知 | 支持 | 不支持 |
accelerometer 权限 | 62 | 62 | 未知 | 未知 | 未知 | 未知 | 不支持 |
accessibility-events 权限 | 62 | 62 | 未知 | 未知 | 未知 | 未知 | 不支持 |
ambient-light-sensor 权限 | 62 | 62 | 未知 | 未知 | 未知 | 未知 | 不支持 |
background-sync 权限 | 62 | 62 | 未知 | 未知 | 未知 | 未知 | 不支持 |
camera 权限 | 64 | 64 | 未知 | 未知 | 未知 | 未知 | 不支持 |
clipboard-read 权限 | 64 | 64 | 未知 | 不支持 | 未知 | 未知 | 不支持 |
clipboard-write 权限 | 64 | 64 | 未知 | 不支持 | 未知 | 未知 | 不支持 |
geolocation 权限 | 不支持 | 43 | 未知 | 未知 | 未知 | 30 | 不支持 |
gyroscope 权限 | 51 | 51 | 未知 | 未知 | 未知 | 未知 | 不支持 |
magnetometer 权限 | 62 | 62 | 未知 | 未知 | 未知 | 未知 | 不支持 |
microphone 权限 | 64 | 64 | 未知 | 未知 | 未知 | 未知 | 不支持 |
midi 权限 | 不支持 | 43 | 未知 | 未知 | 未知 | 30 | 不支持 |
notifications 权限 | 不支持 | 43 | 未知 | 未知 | 未知 | 30 | 不支持 |
payment-handler 权限 | 66 | 66 | 未知 | 未知 | 未知 | 未知 | 不支持 |
persistent-storage 权限 | 71 | 71 | 未知 | 53 | 未知 | 50 | 不支持 |
push 权限 | 不支持 | 43 | 未知 | 未知 | 未知 | 30 | 不支持 |
query | 43 | 43 | 未知 | 46 | 未知 | 支持 | 不支持 |
request | 46 | 46 | 未知 | 不支持 | 未知 | 未知 | 不支持 |
requestAll | 48 | 48 | 未知 | 不支持 | 未知 | 未知 | 不支持 |
revoke | 46 | 46 | 未知 | 51 47 — 51 | 未知 | 未知 | 不支持 |