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 的非详尽列表包括:

接口

Permissions

提供核心的 Permissions API 功能,例如用于查询和撤销权限的方法。

PermissionStatus

提供对权限当前状态的访问,以及一个用于响应权限状态更改的事件处理程序。

其他接口的扩展

分别从主上下文和 worker 上下文提供对 Permissions 对象的访问。

示例

我们创建了一个名为 Location Finder 的示例。您可以 在线运行示例在 GitHub 上查看源代码,或者阅读我们文章 使用 Permissions API 中关于它如何工作的更多信息。

Permissions.query() 示例也展示了测试当前浏览器的大多数权限并记录结果的代码。

规范

规范
Permissions

浏览器兼容性

api.Permissions

api.Navigator.permissions

api.WorkerNavigator.permissions

另见