Signatur
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
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();
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();
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();
// Wichtig · Fallstricke
- Browser-Kompatibilität: Die Generic Sensor API und damit
SensorErrorEventgibt 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
localhostzur Verfügung. In iframes muss die Permissions Policy den Zugriff erlauben (z. B.allow="accelerometer; gyroscope"), sonst kommt einNotAllowedErroroderSecurityError. - Synchron oder asynchron: Fehler im Konstruktor, etwa ein
SecurityErroroder einReferenceErrorbei fehlender Unterstützung, werden sofort geworfen und müssen mittry…catchabgefangen werden. Nur Fehler nachstart()kommen alsSensorErrorEventan. - Nach einem Fehler wird der Sensor gestoppt (
sensor.activatedist dannfalse). Wer es erneut versuchen will, mussstart()noch einmal aufrufen. - Der Text in
error.messageist nicht standardisiert und unterscheidet sich je nach Browser. Steuere deine Programmlogik deshalb immer übererror.name.