XRSystem: devicechange 事件

可用性有限

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

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

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

XRSystem 对象的沉浸式 XR 设备可用性发生变化时,会在此对象上触发 devicechange 事件;例如,VR 头显或 AR 眼镜已连接或断开连接。这是一个通用的 Event,没有额外的属性。

注意: 不要与 MediaDevicesdevicechange 事件混淆。

语法

在诸如 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 Device API
# eventdef-xrsystem-devicechange
WebXR Device API
# dom-xrsystem-ondevicechange

浏览器兼容性