XRSystem: devicechange 事件

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

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

devicechange 事件在 XRSystem 对象上触发,每当沉浸式 XR 设备的可用性发生变化时都会触发;例如,当 VR 头戴式设备或 AR 眼镜连接或断开连接时。它是一个通用 Event,没有添加任何属性。

注意: 不要与 MediaDevices devicechange 事件混淆。

语法

在诸如 addEventListener() 之类的方 法中使用事件名称,或者设置一个事件处理程序属性。

js
addEventListener("devicechange", (event) => {});

ondevicechange = (event) => {};

如果 WebXR 的使用被 xr-spatial-tracking 权限策略 阻止,则不会触发 devicechange 事件。

事件类型

一个通用的 Event,没有添加任何属性。

描述

触发

每当沉浸式 XR 设备的可用性发生变化时触发。例如,当 VR 头戴式设备或 AR 眼镜连接或断开连接时。

用例

例如,您可以使用此事件来监控 WebXR 兼容设备的可用性,以便您可以启用用户可以使用来激活沉浸式模式的 UI 元素。这在下面的 示例 中显示。

示例

此处显示的示例通过根据当前是否有任何沉浸式设备可用来切换“进入 XR”按钮的可用性来处理 devicechange 事件。

js
if (navigator.xr) {
  navigator.xr.addEventListener("devicechange", (event) => {
    navigator.xr.isSessionSupported("immersive-vr").then((immersiveOK) => {
      enableXRButton.disabled = !immersiveOK;
    });
  });
}

当收到 devicechange 时,此代码中设置的处理程序将调用 XR 方法 isSessionSupported() 来确定是否有可处理沉浸式 VR 演示的设备可用。如果有,则进入 XR 模式 的按钮将被启用;否则将被禁用。

您也可以使用 ondevicechange 事件处理程序属性来为 devicechange 事件设置一个单独的处理程序

js
if (navigator.xr) {
  navigator.xr.ondevicechange = (event) => {
    // …
  };
}

规范

规范
WebXR 设备 API
# eventdef-xrsystem-devicechange
WebXR 设备 API
# dom-xrsystem-ondevicechange

浏览器兼容性

BCD 表仅在浏览器中加载