XRSystem: isSessionSupported() 方法

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

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

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

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

如果没有可用设备,或者浏览器没有 XR 设备的使用权限,则 Promise 会因一个合适的 DOMException 而被拒绝。

语法

js
isSessionSupported(mode)

参数

模式

一个 String,指定要检查支持的 WebXR 会话模式。可供检查的模式有:

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

返回值

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

异常

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

SecurityError

此功能的用途被 xr-spatial-tracking 权限策略 阻止。

示例

在此示例中,我们看到 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 Device API
# dom-xrsystem-issessionsupported

浏览器兼容性