Signatur
Beschreibung
Die schreibgeschützte Eigenschaft navigator.activeVRDisplays gehört zur veralteten WebVR-API. Sie gibt ein Array mit allen VRDisplay-Objekten zurück, die gerade Inhalte an ein VR-Headset ausgeben, deren Eigenschaft isPresenting also true ist. Präsentiert kein Gerät, ist das Array leer.
Anders als navigator.getVRDisplays() arbeitet die Eigenschaft synchron und liefert nur die aktiven Displays, nicht alle angeschlossenen. Damit ließ sich schnell prüfen, ob die Seite gerade im VR-Modus läuft, etwa um die normale 2D-Darstellung anzuhalten oder eine laufende Präsentation mit VRDisplay.exitPresent() zu beenden.
Wichtig: WebVR wurde durch die WebXR Device API abgelöst. Für neue Projekte solltest du navigator.xr und XRSession verwenden. Diese Eigenschaft ist höchstens noch für Altcode wichtig und sollte nur hinter einer Funktionsprüfung verwendet werden.
Rückgabewert
VRDisplay-Objekte, die gerade präsentieren. Ist kein Display aktiv, ist das Array leer. Wo WebVR nicht unterstützt wird, ist die Eigenschaft undefined.Beispiele
Mit Funktionsprüfung abfragen, ob gerade präsentiert wird
const isInVR = () => {
if (!('activeVRDisplays' in navigator)) {
return false; // WebVR nicht verfügbar
}
return navigator.activeVRDisplays.length > 0;
};
console.log(isInVR() ? 'VR-Präsentation aktiv' : 'Keine VR-Präsentation');
Alle aktiven Präsentationen beenden
const exitAllVR = async () => {
const displays = navigator.activeVRDisplays ?? [];
await Promise.all(displays.map((display) => display.exitPresent()));
console.log(`${displays.length} Präsentation(en) beendet`);
};
document.querySelector('#exit-vr')?.addEventListener('click', exitAllVR);
Moderne Alternative mit WebXR
// Empfohlener Ersatz: Sitzungsstatus selbst über WebXR verwalten
let activeSession = null;
const startXR = async () => {
if (!navigator.xr || !(await navigator.xr.isSessionSupported('immersive-vr'))) {
console.log('immersive-vr wird nicht unterstützt');
return;
}
activeSession = await navigator.xr.requestSession('immersive-vr');
activeSession.addEventListener('end', () => { activeSession = null; });
console.log('XR-Sitzung aktiv:', activeSession !== null);
};
document.querySelector('#enter-vr')?.addEventListener('click', startXR);
// Wichtig · Fallstricke
- Veraltet und nicht standardisiert: WebVR hat es nie in einen Standard geschafft. Firefox (bis ca. Version 98), Chrome (nur hinter Flag bzw. im Origin Trial) und Samsung Internet haben die Unterstützung entfernt. Nutze stattdessen die WebXR Device API (
navigator.xr). - Prüfe vor dem Zugriff immer mit
'activeVRDisplays' in navigator. Ohne Unterstützung ist die Eigenschaftundefined, und ein Zugriff auf.lengthwirft einenTypeError. - Das Array ist nur eine Momentaufnahme. Es ändert sich nicht automatisch, wenn eine Präsentation startet oder endet. Um auf Änderungen zu reagieren, lausche auf das Window-Ereignis
vrdisplaypresentchange. - WebVR setzte einen sicheren Kontext (HTTPS) voraus und konnte in iframes über eine Berechtigungsrichtlinie gesperrt sein.