权限 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

api.Navigator.permissions

api.WorkerNavigator.permissions

参见