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.
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 auffalse
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.
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