XRSystem: isSessionSupported() 方法

实验性: 这是一个 实验性技术
在生产环境中使用之前,请仔细查看 浏览器兼容性表格

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

XRSystem 方法 isSessionSupported() 返回一个 promise,如果用户指定的 WebXR 会话模式被用户的 WebXR 设备支持,则该 promise 解析为 true。否则,该 promise 解析为 false

如果没有可用的设备或浏览器没有权限使用 XR 设备,则该 promise 将被拒绝,并传入一个适当的 DOMException

语法

js
isSessionSupported(mode)

参数

mode

一个 String,指定要检查其支持性的 WebXR 会话模式。要检查的模式可能为

  • immersive-ar 实验性
  • immersive-vr
  • inline

返回值

一个 Promise,如果指定会话模式受支持,则解析为 true;否则解析为 false

异常

isSessionSupported() 不会抛出真正的异常,而是会拒绝返回的 promise,并将一个 DOMException 传递给拒绝处理程序,其 name 为以下字符串之一。

SecurityError

此功能的使用被 xr-spatial-tracking Permissions Policy 阻止。

示例

在这个例子中,我们看到 isSessionSupported() 用于检测设备是否支持 VR 模式,通过检查是否支持 immersive-vr 会话。如果支持,我们将设置一个按钮,按钮文本为 "进入 XR",点击按钮将调用 onButtonClicked() 方法,并启用按钮。

如果没有正在进行的会话,我们将请求 VR 会话,如果成功,将在 onSessionStarted() 方法中设置会话(未显示)。如果在点击按钮时已经有会话正在进行,我们将调用 xrSession 对象的 end() 方法来关闭 WebXR 会话。

js
if (navigator.xr) {
  navigator.xr.isSessionSupported("immersive-vr").then((isSupported) => {
    if (isSupported) {
      userButton.addEventListener("click", onButtonClicked);
      userButton.textContent = "Enter XR";
      userButton.disabled = false;
    }
  });
}

function onButtonClicked() {
  if (!xrSession) {
    navigator.xr.requestSession("immersive-vr").then((session) => {
      xrSession = session;
      // onSessionStarted() not shown for reasons of brevity and clarity.
      onSessionStarted(xrSession);
    });
  } else {
    // Button is a toggle button.
    xrSession.end();
  }
}

规范

规范
WebXR 设备 API
# dom-xrsystem-issessionsupported

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。