Permissions API
注意:此功能在 Web Workers 中可用。
Permissions API 提供了一种统一的编程方式来查询当前上下文(例如网页或 worker)所关联的 API 权限状态。例如,它可以用来确定是否已授予、拒绝或需要用户特定权限才能访问某个功能或 API。
概念与用法
在过去,不同的 API 以不一致的方式处理各自的权限。例如,Notifications API 提供了请求权限和检查权限状态的自定义方法,而 Geolocation API 则没有。Permissions API 提供了工具,使开发人员能够为处理权限的用户体验实现一致性。
此 API 的权限实际上汇总了该上下文的所有安全限制,包括使用 API 是否需要安全上下文、应用于文档的 Permissions-Policy 限制、用户交互的要求以及用户提示。因此,例如,如果某个 API 受权限策略限制,则返回的权限将是 denied(拒绝),并且不会向用户显示访问提示。
permissions 属性已添加到 Navigator 对象上,该对象同时存在于标准浏览上下文和 worker 上下文(WorkerNavigator — 因此权限检查在 worker 中可用),并返回一个 Permissions 对象,该对象提供了对 Permissions API 功能的访问。
获得该对象后,您就可以使用 Permissions.query() 方法,该方法返回一个 Promise,该 Promise 会解析为特定 API 的 PermissionStatus。
请求权限
如果权限状态为 prompt,则用户必须通过提示来授予对该功能的访问权限。
触发此提示的机制取决于特定 API — 它不是 Permissions API 的一部分。通常,触发器是调用方法以访问或打开功能的代码,或者注册来自该功能并随后访问它的通知的代码。
请注意,并非所有功能都需要提示。权限可能由 Permission Policy 授予,通过 瞬时激活隐式授予,或通过其他机制授予。
撤销权限
权限撤销不由 API 管理。具体来说,曾经提出了一个 Permissions.revoke() 方法,但后来已从已实现的浏览器中移除。
用户可以通过浏览器设置手动移除特定网站的权限
- Firefox:汉堡菜单 > 设置 > 隐私与安全 > 权限(然后选择感兴趣权限的设置按钮)。
- Chrome:汉堡菜单 > 设置 > 显示高级设置。在“隐私”部分,点击“内容设置”。在出现的对话框中,找到“位置”部分,选择“在网站尝试访问时询问…”。最后,点击“例外情况管理”并移除您授予感兴趣网站的权限。
支持权限的 API
并非所有 API 的权限状态都可以使用 Permissions 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 Capture API:
captured-surface-control、display-capture - 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-
提供核心的 Permissions API 功能,例如用于查询和撤销权限的方法。
PermissionStatus-
提供对权限当前状态的访问,以及一个用于响应权限状态更改的事件处理程序。
其他接口的扩展
-
分别从主上下文和 worker 上下文提供对
Permissions对象的访问。
示例
我们创建了一个名为 Location Finder 的示例。您可以 在线运行示例,在 GitHub 上查看源代码,或者阅读我们文章 使用 Permissions API 中关于它如何工作的更多信息。
Permissions.query() 示例也展示了测试当前浏览器的大多数权限并记录结果的代码。
规范
| 规范 |
|---|
| Permissions |
浏览器兼容性
api.Permissions
加载中…
api.Navigator.permissions
加载中…
api.WorkerNavigator.permissions
加载中…