Signatur
Beschreibung
Die Eigenschaft isConnected des VRDisplay-Interfaces aus der veralteten WebVR-API liefert true, wenn das VR-Gerät physisch bzw. logisch mit dem System verbunden ist, und false, wenn die Verbindung getrennt wurde. Die Eigenschaft ist schreibgeschützt.
Nützlich ist sie vor allem, bevor man eine Präsentation mit VRDisplay.requestPresent() startet oder wenn man in der Render-Schleife sicherstellen will, dass das Headset nicht zwischenzeitlich abgezogen wurde. Ein VRDisplay-Objekt kann nämlich weiterexistieren, auch wenn das Gerät nicht mehr verfügbar ist – etwa wenn man eine Referenz aus navigator.getVRDisplays() zwischengespeichert hat.
Statt den Wert regelmäßig abzufragen, empfiehlt es sich, zusätzlich auf die Window-Events vrdisplayconnect und vrdisplaydisconnect zu reagieren. isConnected eignet sich dann als schnelle Plausibilitätsprüfung zum aktuellen Zeitpunkt.
Achtung: WebVR wurde nie standardisiert und ist durch die WebXR Device API abgelöst. Für neue Projekte sollte navigator.xr verwendet werden.
Rückgabewert
true, wenn das VR-Display verbunden ist, sonst false.Beispiele
Verbindungsstatus aller VR-Displays ausgeben
const checkDisplays = async () => {
if (!navigator.getVRDisplays) {
console.log('WebVR wird nicht unterstützt.');
return;
}
const displays = await navigator.getVRDisplays();
for (const display of displays) {
console.log(`${display.displayName}: ${display.isConnected ? 'verbunden' : 'getrennt'}`);
}
};
checkDisplays();
Nur bei verbundenem Headset die Präsentation starten
const startVR = async (canvas) => {
const [display] = await navigator.getVRDisplays();
if (!display || !display.isConnected) {
console.warn('Kein verbundenes VR-Headset gefunden.');
return;
}
// requestPresent muss aus einer Benutzeraktion heraus aufgerufen werden
await display.requestPresent([{ source: canvas }]);
console.log('VR-Präsentation gestartet');
};
document.querySelector('#enter-vr')
.addEventListener('click', () => startVR(document.querySelector('canvas')));
Render-Schleife bei getrenntem Gerät beenden
const renderLoop = (display, drawFrame) => {
const frame = () => {
if (!display.isConnected) {
console.log('Headset getrennt – Rendering gestoppt.');
return;
}
drawFrame();
display.submitFrame();
display.requestAnimationFrame(frame);
};
display.requestAnimationFrame(frame);
};
window.addEventListener('vrdisplaydisconnect', (event) => {
console.log(`Getrennt: ${event.display.displayName}`);
});
// Wichtig · Fallstricke
- Veraltet: Die WebVR-API ist deprecated und wurde aus den meisten Browsern entfernt (Chrome nur hinter Flags/Origin Trial, Firefox bis Version 98 teilweise). Verwende stattdessen die WebXR Device API (
navigator.xr.requestSession()). - Immer per Feature-Erkennung (
'getVRDisplays' in navigator) prüfen, bevor aufVRDisplayzugegriffen wird. - Nicht zu verwechseln mit
Node.isConnectedaus dem DOM, das angibt, ob ein Knoten im Dokument hängt. - Eine zwischengespeicherte
VRDisplay-Referenz kann veraltet sein – den Wert vor kritischen Aktionen erneut prüfen und die Eventsvrdisplayconnect/vrdisplaydisconnectnutzen. - Viele WebVR-Funktionen erfordern einen sicheren Kontext (HTTPS).