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

接口

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

参见