1. 介绍
本文档规定了一个用于请求在 Web 平台上使用强大 特性的权限的函数。
不同的 Web API 有不同的方式来表示开发者使用它们的意图:
-
[notifications] API 允许开发者 请求权限并显式检查 权限状态。
-
[geolocation-API] 将 权限请求与位置请求混为一体。
如果开发者对所有强大特性都有 单一模式可循,那么他们就更容易设计与权限相关的代码。
2. 请求 API
partial interface Permissions {Promise <PermissionStatus >request (object ); };permissionDesc
当调用 request(permissionDesc) 方法时,
用户代理必须运行以下算法,并传入参数 permissionDesc:
-
令 rootDesc 为 permissionDesc 所指的对象,并将其转换为 IDL 值,其类型为
PermissionDescriptor。 如果这抛出异常, 则返回以该异常拒绝的 promise,并中止这些 步骤。 -
令 typedDescriptor 为 permissionDesc 所指的对象,并将其转换 为 IDL 值,其类型为
rootDesc.的 权限描述符类型。如果这抛出 异常,则返回以该 异常拒绝的 promise,并中止这些步骤。name -
令 promise 为一个新创建的
Promise。 -
返回 promise,并异步继续以下步骤。
-
运行用于为 typedDescriptor 创建 PermissionStatus 的步骤,并令 status 为结果。
-
使用 typedDescriptor 和 status 作为 参数,运行名为
typedDescriptor.name的特性的权限请求算法。 -
如果上一步抛出异常,则使用该 异常拒绝 promise。
-
否则,使用 status 兑现 promise。
3. Permission Registry 中的附加字段
Permission Registry 中的强大特性还会定义一个 权限请求 算法:
- 输入
- 行为
- 返回
-
无返回值,但如果请求可能异常失败,则可以抛出异常。 (仅仅是权限被拒绝并不属于异常。)
- 示例调用方
- 默认
-
如果未指定,则默认为默认权限请求 算法。
3.1. 默认请求算法
给定一个 PermissionDescriptor
permissionDesc 和一个 PermissionStatus
status,默认权限请求算法运行以下步骤:
-
对 permissionDesc 和 status 运行默认权限查询算法。
-
如果
status.state不是"prompt", 则中止这些步骤。 -
请求使用 permissionDesc 的权限。
-
再次对 permissionDesc 和 status 运行默认权限查询算法。
在不会在环境设置对象内持久存储权限的浏览器上,这将始终 返回
"prompt", 但仍会向用户显示一个不必要的提示。这可能意味着不应有任何 权限使用默认权限请求算法, 因为它永远无法返回适当的对象能力。
4. 安全性考量
尚未识别出任何安全性考量。
5. 隐私考量
尚未识别出任何隐私考量。