XRSystem: devicechange イベント

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Experimental: これは実験的な機能です。
本番で使用する前にブラウザー互換性一覧表をチェックしてください。

安全なコンテキスト用: この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

devicechangeXRSystem オブジェクトで発生するイベントで、例えば VR ヘッドセットや AR ゴーグルが接続されたり切断されたりと、没入型 XR 機器の利用できる状況が変化した時に発生します。これは一般的な Event で、プロパティは追加されていません。

メモ: MediaDevicesdevicechange イベントと混同しないでください。

構文

このイベント名を addEventListener() などのメソッドで使用するか、イベントハンドラープロパティを設定するかしてください。

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

ondevicechange = (event) => {};

WebXR の使用が xr-spatial-tracking 権限ポリシーによってブロックされている場合、 devicechange イベントは発行されません。

イベント型

一般的な Event で、追加のプロパティはありません。

解説

トリガー

没入型 XR 端末の利用できる状況が変化したときに発生します。例えば、 VR ヘッドセットや AR ゴーグルが接続されたり切断されたりした場合です。

用途

このイベントを使用して、例えば WebXR 互換端末が利用できるかどうかを監視し、ユーザーが没入モードを有効にするために使用する UI 要素を有効にすることができます。この例を下記ので示します。

この例では、「Enter XR」ボタンが利用できるかどうかを、現在利用できる没入型機器があるかどうかに基づいて切り替えることで、devicechangeイベントを処理しています。

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

devicechange を受信すると、このコードで設定したハンドラーは XRisSessionSupported() メソッドを呼び出して、没入型 VR プレゼンテーションを処理できる端末があるかどうかを調べます。ある場合は XR モードに入るボタンが有効になり、ない場合は無効になります。

また、 ondevicechange イベントハンドラープロパティを使用して、 devicechange イベントに単一のハンドラーを設定することもできます。

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

仕様書

Specification
WebXR Device API
# eventdef-xrsystem-devicechange
WebXR Device API
# dom-xrsystem-ondevicechange

ブラウザーの互換性

BCD tables only load in the browser