Start · Sprachen · JavaScript · Referenz · SensorErrorEvent.error

SensorErrorEvent.error

Eigenschaft

Schreibgeschützte Eigenschaft, die die <code>DOMException</code> liefert, die beschreibt, warum ein Sensor der Generic Sensor API einen Fehler ausgelöst hat.

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

Signatur

SensorErrorEvent.error

Beschreibung

Die Eigenschaft error eines SensorErrorEvent enthält das DOMException-Objekt, das dem Konstruktor des Ereignisses übergeben wurde. Solche Ereignisse löst die Generic Sensor API aus, wenn ein Sensor wie Accelerometer, Gyroscope, AmbientLightSensor oder AbsoluteOrientationSensor nicht gestartet werden kann oder im Betrieb ausfällt.

Über event.error.name findest du die Fehlerursache heraus und kannst passend reagieren. Typische Werte sind:

  • NotAllowedError – die Berechtigung wurde verweigert oder eine Permissions Policy blockiert den Sensor.
  • NotReadableError – der Sensor ist gerade nicht verfügbar oder nicht lesbar, zum Beispiel wegen eines Hardwarefehlers.
  • NotSupportedError – das Gerät hat diesen Sensortyp nicht.
  • SecurityError – der Sensor wurde schon im Konstruktor wegen einer Sicherheitsrichtlinie abgelehnt.

Du fragst die Eigenschaft im error-Ereignis eines Sensors ab, entweder mit sensor.addEventListener('error', handler) oder über sensor.onerror. Sie ist schreibgeschützt, eine Zuweisung hat keine Wirkung.

Rückgabewert

Typ
DOMException
Beschreibung
Das Fehlerobjekt mit name (z. B. NotAllowedError) und message (eine Beschreibung, die sich je nach Browser unterscheidet).

Beispiele

Fehlerursache eines Beschleunigungssensors auswerten

const sensor = new Accelerometer({ frequency: 30 });

sensor.addEventListener('error', (event) => {
  const { name, message } = event.error;
  switch (name) {
    case 'NotAllowedError':
      console.warn('Zugriff auf den Sensor wurde verweigert.');
      break;
    case 'NotReadableError':
      console.warn('Sensor ist derzeit nicht verfügbar.');
      break;
    case 'NotSupportedError':
      console.warn('Dieses Gerät hat keinen Beschleunigungssensor.');
      break;
    default:
      console.error(`Unbekannter Sensorfehler: ${name} – ${message}`);
  }
});

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

sensor.start();
Sensor ist derzeit nicht verfügbar. // z. B. auf einem Desktop-PC ohne Sensor

on-Property und SecurityError im Konstruktor abfangen

const startGyroscope = () => {
  let gyro;
  try {
    gyro = new Gyroscope({ frequency: 60 });
  } catch (err) {
    // Wird synchron geworfen, nicht als Event gemeldet
    console.error(`Konstruktor fehlgeschlagen: ${err.name}`);
    return null;
  }

  gyro.onerror = (event) => {
    console.log(event instanceof SensorErrorEvent); // true
    console.log(event.error instanceof DOMException); // true
    console.log(`Fehler: ${event.error.name}`);
    gyro.onerror = null; // Handler entfernen
  };

  gyro.start();
  return gyro;
};

startGyroscope();
true true Fehler: NotReadableError

Berechtigung vorab prüfen und Fehlermeldung anzeigen

const initLightSensor = async () => {
  if (!('AmbientLightSensor' in window)) {
    console.log('AmbientLightSensor wird nicht unterstützt.');
    return;
  }

  const { state } = await navigator.permissions.query({ name: 'ambient-light-sensor' });
  if (state === 'denied') {
    console.log('Berechtigung verweigert.');
    return;
  }

  const sensor = new AmbientLightSensor();
  const onError = (event) => {
    console.log(`Lichtsensor-Fehler (${event.error.name}): ${event.error.message}`);
    sensor.removeEventListener('error', onError);
    sensor.stop();
  };
  sensor.addEventListener('error', onError);
  sensor.addEventListener('reading', () => console.log(`${sensor.illuminance} lx`));
  sensor.start();
};

initLightSensor();
Lichtsensor-Fehler (NotReadableError): Could not connect to a sensor

// Wichtig · Fallstricke

  • Browser-Kompatibilität: Die Generic Sensor API und damit SensorErrorEvent gibt es nur in Chromium-Browsern (Chrome, Edge, Opera), und das hauptsächlich auf Mobilgeräten. Firefox und Safari unterstützen sie nicht. Prüfe deshalb zuerst mit 'Accelerometer' in window, ob der Sensor vorhanden ist.
  • Sicherer Kontext nötig: Die API steht nur unter HTTPS oder localhost zur Verfügung. In iframes muss die Permissions Policy den Zugriff erlauben (z. B. allow="accelerometer; gyroscope"), sonst kommt ein NotAllowedError oder SecurityError.
  • Synchron oder asynchron: Fehler im Konstruktor, etwa ein SecurityError oder ein ReferenceError bei fehlender Unterstützung, werden sofort geworfen und müssen mit try…catch abgefangen werden. Nur Fehler nach start() kommen als SensorErrorEvent an.
  • Nach einem Fehler wird der Sensor gestoppt (sensor.activated ist dann false). Wer es erneut versuchen will, muss start() noch einmal aufrufen.
  • Der Text in error.message ist nicht standardisiert und unterscheidet sich je nach Browser. Steuere deine Programmlogik deshalb immer über error.name.