权限 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
BCD tables only load in the browser
api.Navigator.permissions
BCD tables only load in the browser
api.WorkerNavigator.permissions
BCD tables only load in the browser