权限 API
备注: 此特性在 Web Worker 中可用。
权限 API 提供了一种一致的编程方式来查询当前上下文(例如网页或 worker)的 API 权限状态。例如,它可用于确定访问特定功能或 API 的权限是否已被授予、被拒绝或需要特定用户权限。
概念和用法
历史上不同的 API 对自己的权限的处理方式不一致——例如,Notifications API 提供了自己的方法来请求权限和检查权限状态,而 Geolocation API 没有。权限 API 提供的工具允许开发者在使用权限时实现一致的用户体验。
此 API 的权限有效地汇总了上下文的所有安全限制,包括在安全上下文中使用 API 的任何要求、应用于文档的 Permissions-Policy 限制、用户交互要求和用户提示。因此,例如,如果 API 受到权限策略的限制,则返回的权限将会为 denied,并且不会提示用户访问。
permissions 属性已在 Navigator 对象上可用,在标准浏览上下文和 worker 上下文中均可用(WorkerNavigator——因此可在 worker 内进行权限检查),并返回 Permissions 对象,该对象提供对权限 API 功能的访问。
一旦你有了这个对象,你就可以使用 Permissions.query() 方法返回一个通过 PermissionStatus 兑现特定 API 的 promise。
请求权限
如果权限状态为 prompt,则用户必须确认提示以授予对该特性的访问权限。
触发此提示的机制将取决于特定 API——它未定义为权限 API 的一部分。通常,触发器是调用方法来访问或打开该特性的代码,或者注册随后将访问该特性的通知的代码。
请注意,并非所有功能都需要提示。权限可能由 Permission Policy 授予,由瞬态激活隐式授予,或通过其他机制授予。
撤销权限
权限撤销不由 API 管理。更具体地说,Permissions.revoke() 方法曾被提出,但此后已从实施该方法的浏览器中删除。
用户可以使用浏览器设置手动删除特定网站的权限:
- Firefox:菜单 > 设置 > 隐私和安全 > 权限(然后选择感兴趣的权限的设置按钮)。
- Chrome:菜单 > 设置 > 显示高级设置。在隐私部分中,单击内容设置。在出现的对话框中,找到位置部分并选择当网站尝试... 时询问。最后,单击管理例外并删除你授予你感兴趣的网站的权限。
权限相关的 API
并非所有 API 的权限状态都可以通过权限 API 查询。权限相关的 API 的非详尽列表包括:
- Background Synchronization API:
background-sync(应当总是被授予) - Clipboard API:
clipboard-read、clipboard-write - Compute Pressure API:
compute-pressure - Geolocation API:
geolocation - Local Font Access API:
local-fonts - Media Capture and Streams API:
microphone、camera - Notifications API:
notifications - Payment Handler API:
payment-handler - Push API:
push - Screen Wake Lock API:
screen-wake-lock - Sensor APIs:
accelerometer、gyroscope、magnetometer、ambient-light-sensor - Storage Access API:
storage-access、top-level-storage-access - Storage API:
persistent-storage - Web Bluetooth API:
bluetooth - Web MIDI API:
midi - Window Management API:
window-management
接口
Permissions-
提供核心权限 API 功能,例如查询和撤销权限的方法。
PermissionStatus-
提供对权限当前状态的访问,以及响应权限状态更改的事件处理器。
对其他接口的扩展
-
分别用于访问主上下文和 worker 上下文的
Permissions对象。
示例
我们创建了一个名为 Location Finder 的示例。你可以实时运行示例、在 GitHub 上查看源代码,或者在我们的文章使用权限 API中阅读有关其工作原理的更多信息。
Permissions.query() 示例也展示了在当前浏览器上测试大多数权限并记录结果的代码。
规范
| Specification |
|---|
| Permissions> |
浏览器兼容性
>api.Permissions
Loading…
api.Navigator.permissions
Loading…
api.WorkerNavigator.permissions
Loading…