Signatur
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
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);
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();
// 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.
localhostzur Verfügung. In Iframes kann eine Permissions Policy den Zugriff sperren, zum Beispielaccelerometer,gyroscopeodermagnetometer. - Das Feld
errorist Pflicht: Rufst du den Konstruktor ohneoptionsoder ohneerrorauf, wirft er einenTypeError. Übergib eine echteDOMException. Ein normalesError-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
SensorErrorEventan. Fehlt die API ganz, wirft schon der Sensor-Konstruktor eine Ausnahme (etwaSecurityErroroderReferenceError). Deshalb gehörtnew Accelerometer()zusätzlich in eintry…catch.