Start · Sprachen · JavaScript · Referenz · VRDisplay.displayId

VRDisplay.displayId

Eigenschaft

Schreibgeschützte Zahl, die ein <code>VRDisplay</code> eindeutig kennzeichnet und über <code>Gamepad.displayId</code> die zugehörigen Controller zuordnet.

seit JavaScript WebVR 1.1 (veraltet, nicht standardisiert) – durch deprecated seit ja Kategorie: webapi

Signatur

VRDisplay.displayId

Beschreibung

Die schreibgeschützte Eigenschaft displayId der veralteten WebVR-Schnittstelle VRDisplay liefert eine Ganzzahl, die dieses VR-Anzeigegerät eindeutig bezeichnet. Solange das Gerät verbunden bleibt, ändert sich der Wert nicht.

Vor allem dient sie als Verbindung zur Gamepad API: Gehört ein Controller zu einem bestimmten Headset (etwa die Handcontroller einer HTC Vive oder Oculus Rift), dann hat seine Eigenschaft Gamepad.displayId denselben Wert wie VRDisplay.displayId. So lassen sich Controller und Headset einander zuordnen, wenn mehrere Geräte angeschlossen sind.

Außerdem eignet sich displayId als Schlüssel, um Anzeigen in einer Map zu verwalten oder in vrdisplayconnect- und vrdisplaydisconnect-Ereignissen wiederzuerkennen.

Wichtig: WebVR ist veraltet und aus fast allen Browsern entfernt worden. Für neue Projekte ist die WebXR Device API gedacht, in der es keine vergleichbare displayId gibt. Dort gehören Eingabegeräte über XRSession.inputSources direkt zur Sitzung.

Rückgabewert

Typ
number
Beschreibung
Eine vorzeichenlose Ganzzahl (unsigned long), die das VRDisplay eindeutig bezeichnet. Der Wert ist schreibgeschützt.

Beispiele

displayId aller angeschlossenen VR-Displays ausgeben

if ('getVRDisplays' in navigator) {
  const displays = await navigator.getVRDisplays();
  for (const display of displays) {
    console.log(`${display.displayName}: ID ${display.displayId}`);
  }
} else {
  console.log('WebVR wird nicht unterstützt – bitte WebXR verwenden.');
}
Oculus VR HMD: ID 1

Controller dem passenden Headset zuordnen

const findControllersFor = (display) =>
  [...navigator.getGamepads()]
    .filter((pad) => pad && pad.displayId === display.displayId);

const [display] = await navigator.getVRDisplays();
if (display) {
  const controllers = findControllersFor(display);
  console.log(`${controllers.length} Controller gehören zu ${display.displayName}`);
  controllers.forEach((pad) => console.log(pad.id, pad.hand));
}
2 Controller gehören zu Oculus VR HMD Oculus Touch (Left) left Oculus Touch (Right) right

Displays per displayId in einer Map verwalten

const activeDisplays = new Map();

window.addEventListener('vrdisplayconnect', (event) => {
  const { display } = event;
  activeDisplays.set(display.displayId, display);
  console.log('Verbunden:', display.displayId);
});

window.addEventListener('vrdisplaydisconnect', (event) => {
  activeDisplays.delete(event.display.displayId);
  console.log('Getrennt:', event.display.displayId, '– verbleibend:', activeDisplays.size);
});
Verbunden: 1 Getrennt: 1 – verbleibend: 0

// Wichtig · Fallstricke

  • Veraltet: WebVR und damit VRDisplay.displayId werden nicht mehr gepflegt. Nur alte Firefox-Versionen, Chrome mit Flag bzw. in Origin Trials und Samsung Internet haben es je unterstützt. Aktuelle Browser haben die API entfernt. Frage die Unterstützung immer ab, z. B. mit 'getVRDisplays' in navigator, und nutze für neue Projekte WebXR.
  • Den genauen Zahlenwert legt der Browser fest und er ist nicht über Sitzungen oder Seitenaufrufe hinweg stabil. Speichere ihn daher nicht dauerhaft, etwa in localStorage.
  • Ein Gamepad, das zu keinem VR-Display gehört, hat als displayId den Wert 0. Prüfe beim Zuordnen deshalb auf Gleichheit mit der Display-ID und nicht nur darauf, ob der Wert „wahr“ ist.
  • Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird still ignoriert bzw. wirft im Strict Mode einen TypeError.
  • Die WebVR-API steht nur in sicheren Kontexten (HTTPS) zur Verfügung.