XRPermissionDescriptor - 用于描述应用程序需要使用的和授权的 WebXR 功能

安全上下文
该功能仅在部分或所有支持的浏览器中的安全上下文(HTTPS)中可用。

XRPermissionDescriptor 词典用于描述应用程序需要使用的 WebXR 功能,以及在授予权限的情况下希望使用的功能。WebXR 设备 API 中的用户权限使用权限 API 进行管理。

XRPermissionDescriptorname 必须设置为 xr ,以指示权限 API 正确处理应用于 WebXR 的请求。

属性

除了继承父接口 PermissionDescriptor 的属性外,XRPermissionDescriptor 还提供以下属性。

mode

一个 XRSessionMode 值,指示请求权限的 XR 模式(inlineimmersive-vrimmersive-ar)。

optionalFeatures

一个包含字符串的数组,每个字符串指定 WebXR 功能的名称,该名称是应用程序所请求的,但不是应用程序运行所必需的。可用功能与 XRSessionInit 使用的功能相同。有关更多信息,请参见 XRSessionInit 中的默认功能

requiredFeatures

一个包含字符串数组,提供要使用您的应用程序或网站必须获得权限的 WebXR 功能的名称。

实例

下面的实例演示了如何在 immersive-vr(“沉浸式 vr”)环境中对需要 local-floor(“本地楼层”)参考空间的应用程序执行权限请求。

如果权限 API 可用(通过检查是否定义了 navigator.permissions),则其调用其 query() 方法,指定我们已建立的权限描述符 xrPermissionDesc

当返回的 promise 解析后,我们将检查返回的状态。如果已授予权限,我们将调用 setupXR() 函数来处理准备使用的 WebXR 环境。如果权限是基于提示的条件条件,则我们调用函数 setupXR() ,该函数将在启用和启动环境之前处理请求权限。对于任何其他返回状态(几乎可以肯定是 “被拒绝”,这是本文撰写时唯一的其他选择),我们什么也不做,因为我们无法使用 WebXR。

如果权限是基于提示的条件,则我们调用 promptAndSetupXR() 函数,该函数将在启用和启动环境之前处理请求权限。对于任何其他返回状态(几乎可以肯定是 denied,这是本文撰写时唯一的其他选择),我们什么也不做,因为我们无法使用 WebXR。

如果权限请求承诺被拒绝,则将处理该错误(当前仅使用 console.log())将其转储到控制台中)。

如果权限 API 不可用,则本实例假定 WebXR 将报告相应的错误,接着尝试使用相同的 setupXR() 函数来启动 WebXR 会话。

let xrPermissionDesc = {
  name: "xr",
  mode: "immersive-vr",
  requiredFeatures: [ "local-floor" ]
};

if (navigator.permissions) {
  navigator.permissions.query(xrPermissionDesc).then(({state}) => {
    switch(state) {
      case "granted":
        setupXR();
        break;
      case "prompt":
        promptAndSetupXR();
        break;
      default:
        /* 否则不做任何事情 */
       break;
  }
  .catch(err) {
    console.log(err);
  }
} else {
  setupXR();
}

规范

规范 状态 备注
WebXR Device API
XRPermissionDescriptor 的定义
工作草案 初始定义。

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持 不支持 不支持 不支持 不支持 不支持 不支持
mode 不支持 不支持 不支持 不支持 不支持 不支持
optionalFeatures 不支持 不支持 不支持 不支持 不支持 不支持
requiredFeatures 不支持 不支持 不支持 不支持 不支持 不支持

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持 不支持 不支持 未知 不支持 未知 不支持 不支持
mode 不支持 不支持 未知 不支持 未知 不支持 不支持
optionalFeatures 不支持 不支持 未知 不支持 未知 不支持 不支持
requiredFeatures 不支持 不支持 未知 不支持 未知 不支持 不支持

相关链接