XRSystem

Limited availability

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

Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.

Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig, bevor Sie diese produktiv verwenden.

Die Schnittstelle WebXR Device API XRSystem bietet Methoden, die es Ihnen ermöglichen, auf ein XRSession-Objekt zuzugreifen, das eine WebXR-Sitzung darstellt. Mit dieser XRSession können Sie mit dem Augmented Reality (AR) oder Virtual Reality (VR) Gerät interagieren.

EventTarget XRSystem

Instanz-Eigenschaften

Obwohl XRSystem direkt keine Eigenschaften bietet, erbt es Eigenschaften von seiner Elternschnittstelle, EventTarget.

Instanz-Methoden

Neben den von der Elternschnittstelle EventTarget geerbten Methoden umfasst die XRSystem-Schnittstelle die folgenden Methoden:

isSessionSupported() Experimentell

Gibt ein Versprechen zurück, das auf true aufgelöst wird, wenn der Browser den angegebenen Sitzungsmodus unterstützt. Wird auf false aufgelöst, wenn der angegebene Modus nicht unterstützt wird.

requestSession() Experimentell

Gibt ein Versprechen zurück, das auf eine neue XRSession mit dem angegebenen Sitzungsmodus aufgelöst wird.

Ereignisse

devicechange Experimentell

Wird gesendet, wenn sich die Menge der verfügbaren XR-Geräte geändert hat. Auch über den ondevicechange-Ereignis-Handler verfügbar.

Nutzungshinweise

Diese Schnittstelle war in früheren Versionen der Spezifikation als XR bekannt; wenn Sie Verweise auf XR in Code oder Dokumentation sehen, ersetzen Sie diese durch XRSystem.

Beispiele

Das folgende Beispiel zeigt, wie sowohl isSessionSupported() als auch requestSession() verwendet werden.

js
if (navigator.xr) {
  immersiveButton.addEventListener("click", onButtonClicked);
  navigator.xr.isSessionSupported("immersive-vr").then((isSupported) => {
    immersiveButton.disabled = !isSupported;
  });
}

function onButtonClicked() {
  if (!xrSession) {
    navigator.xr.requestSession("immersive-vr").then((session) => {
      // onSessionStarted() not shown for reasons of brevity and clarity.
      onSessionStarted(session);
    });
  } else {
    // Shut down the already running XRSession
    xrSession.end().then(() => {
      // Since there are cases where the end event is not sent, call the handler here as well.
      onSessionEnded();
    });
  }
}

Dieser Code beginnt damit zu überprüfen, ob WebXR verfügbar ist, indem die navigator.xr-Eigenschaft gesucht wird. Wenn sie gefunden wird, wissen wir, dass WebXR vorhanden ist, und fahren fort, einen Handler für den Button einzurichten, den der Benutzer anklicken kann, um den immersiven VR-Modus ein- und auszuschalten.

Wir wissen jedoch noch nicht, ob der gewünschte immersive Modus verfügbar ist. Um dies festzustellen, rufen wir isSessionSupported() auf, übergeben die gewünschte Sitzungsoption, bevor der Button immersiveButton aktiviert wird, den dann der Benutzer nur verwenden kann, um in den immersiven Modus zu wechseln, wenn der immersive VR-Modus verfügbar ist. Wenn der immersive VR nicht verfügbar ist, wird der Button deaktiviert, um seine Nutzung zu verhindern.

Die Funktion onButtonClicked() überprüft, ob bereits eine Sitzung läuft. Falls nicht, verwenden wir requestSession(), um eine zu starten, und sobald das zurückgegebene Versprechen aufgelöst wird, rufen wir eine Funktion onSessionStarted() auf, um unsere Sitzung für das Rendering und so weiter einzurichten.

Wenn hingegen bereits eine laufende XR-Sitzung besteht, rufen wir stattdessen end() auf, um die aktuelle Sitzung zu beenden. Wenn die aktuelle Sitzung endet, wird das end Ereignis gesendet, sodass xrSession im entsprechenden Handler auf null gesetzt wird, um zu vermerken, dass wir keine laufende Sitzung mehr haben. Auf diese Weise startet eine neue Sitzung, wenn der Benutzer den Button erneut anklickt.

Spezifikationen

Specification
WebXR Device API
# xrsystem-interface

Browser-Kompatibilität

BCD tables only load in the browser