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

new SensorErrorEvent()

Methode

Erstellt ein neues <code>SensorErrorEvent</code>-Objekt, das einen Fehler einer auf <code>Sensor</code> basierenden Schnittstelle als <code>DOMException</code> beschreibt.

seit JavaScript Generic Sensor API – Chromium-Browser (Chrome/Edge Kategorie: webapi

Signatur

new SensorErrorEvent(type, options)

Beschreibung

Der Konstruktor SensorErrorEvent() erzeugt ein Ereignisobjekt vom Typ SensorErrorEvent. Solche Objekte gehören zur Generic Sensor API. Der Browser erzeugt sie selbst und löst sie auf Sensor-Instanzen wie Accelerometer, Gyroscope, Magnetometer oder AmbientLightSensor aus, sobald ein Fehler auftritt. Das kann zum Beispiel eine fehlende Berechtigung sein, ein nicht vorhandener Hardware-Sensor oder eine Richtlinie (Permissions Policy), die den Zugriff sperrt.

Im normalen Anwendungscode ruft man den Konstruktor selten direkt auf. Nützlich ist er vor allem, um eigene Sensor-Fehler zu simulieren, etwa in Unit-Tests, in Polyfills oder in eigenen Sensor-Abstraktionen, die sich wie native Sensoren verhalten sollen. Das erzeugte Ereignis gibt man anschließend mit dispatchEvent() an ein EventTarget weiter.

Die wichtigste Eigenschaft des Ereignisses ist error. Sie enthält eine DOMException, deren name die Fehlerursache angibt, typischerweise NotAllowedError, NotReadableError oder NotSupportedError. Das Options-Objekt muss error deshalb zwingend enthalten.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Name des Ereignisses, in der Praxis immer "error". Groß- und Kleinschreibung werden beachtet.
$options Pflicht object Wörterbuch vom Typ SensorErrorEventInit. Pflicht ist error (eine DOMException). Zusätzlich sind die üblichen EventInit-Felder bubbles, cancelable und composed erlaubt (Standard jeweils false).

Rückgabewert

Typ
SensorErrorEvent
Beschreibung
Ein neues SensorErrorEvent-Objekt, dessen Eigenschaft error die übergebene DOMException enthält.

Beispiele

Ereignis manuell erzeugen und auswerten

const fehler = new DOMException('Sensor nicht verfügbar', 'NotReadableError');
const event = new SensorErrorEvent('error', { error: fehler });

console.log(event.type);
console.log(event.error.name);
console.log(event.error.message);
error NotReadableError Sensor nicht verfügbar

Native Sensor-Fehler behandeln (addEventListener und onerror)

if ('Accelerometer' in window) {
  const sensor = new Accelerometer({ frequency: 30 });

  sensor.addEventListener('error', (event) => {
    // event ist ein SensorErrorEvent
    if (event.error.name === 'NotAllowedError') {
      console.warn('Zugriff auf den Beschleunigungssensor verweigert.');
    } else if (event.error.name === 'NotReadableError') {
      console.warn('Sensor kann nicht gelesen werden.');
    } else {
      console.error(event.error);
    }
  });

  // Alternative über die on-Property:
  // sensor.onerror = (event) => console.error(event.error.name);

  sensor.addEventListener('reading', () => {
    console.log(`x=${sensor.x}, y=${sensor.y}, z=${sensor.z}`);
  });

  sensor.start();
} else {
  console.log('Generic Sensor API wird nicht unterstützt.');
}

Fehler in einem Test oder einer eigenen Sensor-Abstraktion simulieren

class FakeSensor extends EventTarget {
  start() {
    // Verhalten eines Sensors ohne Berechtigung nachbilden
    queueMicrotask(() => {
      const error = new DOMException('Berechtigung fehlt', 'NotAllowedError');
      this.dispatchEvent(new SensorErrorEvent('error', { error }));
    });
  }
}

const sensor = new FakeSensor();
sensor.addEventListener('error', (e) => {
  console.log(`${e.constructor.name}: ${e.error.name}`);
});
sensor.start();
SensorErrorEvent: NotAllowedError

// Wichtig · Fallstricke

  • Browser-Unterstützung: Die Generic Sensor API gibt es nur in Chromium-basierten Browsern (Chrome, Edge, Opera, Samsung Internet). Firefox und Safari unterstützen sie nicht. Prüfe vor der Nutzung mit 'SensorErrorEvent' in window.
  • Nur in sicheren Kontexten: Die API steht nur unter HTTPS bzw. localhost zur Verfügung. In Iframes kann eine Permissions Policy den Zugriff sperren, zum Beispiel accelerometer, gyroscope oder magnetometer.
  • Das Feld error ist Pflicht: Rufst du den Konstruktor ohne options oder ohne error auf, wirft er einen TypeError. Übergib eine echte DOMException. Ein normales Error-Objekt wird nicht akzeptiert.
  • Selbst erzeugte Ereignisse haben isTrusted === false. So lassen sie sich von echten Browser-Ereignissen unterscheiden.
  • Viele Fehler kommen gar nicht als SensorErrorEvent an. Fehlt die API ganz, wirft schon der Sensor-Konstruktor eine Ausnahme (etwa SecurityError oder ReferenceError). Deshalb gehört new Accelerometer() zusätzlich in ein try…catch.