Start · Sprachen · JavaScript · Referenz · new VRDisplayEvent()

new VRDisplayEvent()

Methode

Der Konstruktor <code>VRDisplayEvent()</code> erzeugt ein neues <code>VRDisplayEvent</code>-Objekt. Es beschreibt ein Ereignis rund um ein VR-Anzeigegerät der veralteten WebVR-API.

seit JavaScript WebVR 1.1 (veraltet, nicht standardisiert; nur ält deprecated seit ja Kategorie: webapi

Signatur

new VRDisplayEvent(type, eventInitDict)

Beschreibung

Mit dem Konstruktor new VRDisplayEvent() erzeugen Sie ein Ereignisobjekt der WebVR-API. Der Browser löst solche Ereignisse normalerweise selbst aus, etwa vrdisplayconnect, vrdisplaydisconnect, vrdisplayactivate, vrdisplaydeactivate oder vrdisplaypresentchange. Dafür reagiert er auf den Zustand eines Headsets, zum Beispiel wenn es angeschlossen oder aufgesetzt wird oder wenn die Darstellung wechselt.

Den Konstruktor selbst brauchen Sie vor allem in Tests und Polyfills: Sie erzeugen ein synthetisches Ereignis mit einem bestimmten VRDisplay und einem Grund (reason) und lösen es dann mit dispatchEvent() auf window aus. So prüfen Sie Ihre Ereignis-Handler ohne echte Hardware.

Das erzeugte Objekt erbt von Event und hat zusätzlich die schreibgeschützten Eigenschaften display (das betroffene VRDisplay) und reason (warum das Ereignis ausgelöst wurde).

Wichtig: WebVR ist veraltet und wurde durch die WebXR Device API ersetzt. Für neue Projekte sollten Sie navigator.xr und XRSession-Ereignisse verwenden.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Name des Ereignisses, z. B. "vrdisplayconnect", "vrdisplaydisconnect", "vrdisplayactivate", "vrdisplaydeactivate", "vrdisplayblur", "vrdisplayfocus" oder "vrdisplaypresentchange".
$eventInitDict Pflicht object Initialisierungsobjekt. Zusätzlich zu den Optionen von EventInit (bubbles, cancelable, composed) enthält es:
  • display (VRDisplay, Pflicht): das betroffene Anzeigegerät.
  • reason (string, optional): einer der Werte "mounted", "navigation", "requested" oder "unmounted".

Rückgabewert

Typ
VRDisplayEvent
Beschreibung
Ein neues VRDisplayEvent-Objekt. Seine Eigenschaften display und reason werden aus eventInitDict übernommen.

Beispiele

Synthetisches Ereignis erzeugen und auslösen

// Nur ausführen, wenn der Browser WebVR unterstützt
const testeVrEreignis = async () => {
  if (!('getVRDisplays' in navigator) || typeof VRDisplayEvent === 'undefined') {
    console.log('WebVR wird nicht unterstützt – bitte WebXR verwenden.');
    return;
  }

  const [display] = await navigator.getVRDisplays();
  if (!display) {
    console.log('Kein VR-Gerät gefunden.');
    return;
  }

  window.addEventListener('vrdisplayactivate', (event) => {
    console.log(`Aktiviert: ${event.display.displayName}, Grund: ${event.reason}`);
  });

  const event = new VRDisplayEvent('vrdisplayactivate', {
    display,
    reason: 'mounted'
  });
  window.dispatchEvent(event);
};

testeVrEreignis();
Aktiviert: Oculus Rift CV1, Grund: mounted (bzw. „WebVR wird nicht unterstützt – bitte WebXR verwenden.“ in aktuellen Browsern)

Eigenschaften eines erzeugten Ereignisses prüfen

const pruefeEreignis = async () => {
  if (typeof VRDisplayEvent === 'undefined') {
    console.log('VRDisplayEvent nicht verfügbar');
    return;
  }
  const [display] = await navigator.getVRDisplays();
  if (!display) return;

  const event = new VRDisplayEvent('vrdisplaydisconnect', { display });
  console.log(event.type);                 // Ereignistyp
  console.log(event.display === display);  // Referenz auf das Gerät
  console.log(event.reason);               // ohne Angabe nicht gesetzt
  console.log(event instanceof Event);
};

pruefeEreignis();
vrdisplaydisconnect true undefined true

Moderne Alternative: WebXR-Sitzungsereignisse

// Empfohlener Ersatz für WebVR-Ereignisse
const starteXr = async () => {
  if (!navigator.xr || !(await navigator.xr.isSessionSupported('immersive-vr'))) {
    console.log('immersive-vr nicht verfügbar');
    return;
  }
  // Muss aus einer Benutzeraktion heraus aufgerufen werden
  const session = await navigator.xr.requestSession('immersive-vr');
  session.addEventListener('visibilitychange', () => {
    console.log('Sichtbarkeit:', session.visibilityState);
  });
  session.addEventListener('end', () => console.log('XR-Sitzung beendet'));
};

document.querySelector('#vr-button')?.addEventListener('click', starteXr);

// Wichtig · Fallstricke

  • Veraltet und nicht standardisiert: WebVR 1.1 wurde nie zum Standard und ist aus aktuellen Browsern entfernt. Chrome hat es nur hinter Flags oder in Origin Trials angeboten, in Firefox wurde es entfernt. Nutzen Sie stattdessen die WebXR Device API.
  • Funktionsprüfung ist Pflicht: Prüfen Sie vor dem Aufruf mit typeof VRDisplayEvent !== 'undefined', ob der Konstruktor existiert. Sonst wird ein ReferenceError ausgelöst.
  • display ist ein Pflichtfeld und muss ein echtes VRDisplay-Objekt sein. Ein einfaches Objekt als Ersatz führt zu einem TypeError.
  • Ereignisse, die Sie selbst mit dispatchEvent() auslösen, haben isTrusted === false. Sie gelten daher nicht als Benutzeraktion. Ein Aufruf von VRDisplay.requestPresent() in einem solchen Handler kann deshalb abgelehnt werden.
  • Nur Ereignisse mit dem Grund reason: \"navigation\" oder \"requested\", die der Browser selbst auslöst, erlauben es, ohne Klick in den Präsentationsmodus zu wechseln.