Signatur
Beschreibung
Das activate-Ereignis gehört zur Generic Sensor API und wird an einem Sensor-Objekt (z. B. Accelerometer, Gyroscope, AmbientLightSensor, AbsoluteOrientationSensor) ausgelöst, wenn der Sensor nach dem Aufruf von start() tatsächlich bereit ist. Ab diesem Zeitpunkt ist sensor.activated true. Der erste Messwert kommt kurz danach über das reading-Ereignis.
Anmelden können Sie sich mit sensor.addEventListener("activate", handler) oder über die Eigenschaft sensor.onactivate = handler. Der Handler bekommt ein einfaches Event ohne zusätzliche Eigenschaften. Er eignet sich dafür, die Oberfläche umzuschalten (etwa „Sensor läuft“ anzeigen), Zeitmessungen zu starten oder Ladeanzeigen auszublenden.
Das Ereignis wird nur ausgelöst, wenn die Aktivierung klappt. Wenn Berechtigungen fehlen, der Sensor nicht vorhanden ist oder das Dokument nicht sichtbar ist, kommt stattdessen ein error-Ereignis (SensorErrorEvent). Deshalb sollten Sie activate immer zusammen mit error behandeln.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Der Ereignistyp, hier "activate". |
|
| $handler Pflicht | (event: Event) => void | Callback, das bei der Aktivierung aufgerufen wird. event.target ist die Sensor-Instanz. |
|
| $options | boolean | AddEventListenerOptions | false | Optionale Listener-Optionen wie { once: true } oder { signal }. |
Rückgabewert
addEventListener gibt nichts zurück. Der Handler bekommt ein Event ohne eigene Zusatzdaten.Beispiele
Beschleunigungssensor starten und Aktivierung erkennen
if ('Accelerometer' in window) {
const sensor = new Accelerometer({ frequency: 30 });
sensor.addEventListener('activate', () => {
console.log('Sensor aktiv:', sensor.activated);
});
sensor.addEventListener('reading', () => {
console.log(`x=${sensor.x.toFixed(2)} y=${sensor.y.toFixed(2)} z=${sensor.z.toFixed(2)}`);
});
sensor.addEventListener('error', (e) => {
console.error('Sensorfehler:', e.error.name, e.error.message);
});
sensor.start();
} else {
console.warn('Accelerometer wird nicht unterstützt.');
}
onactivate-Eigenschaft mit Statusanzeige in der Oberfläche
const status = document.querySelector('#sensor-status');
const gyro = new Gyroscope({ frequency: 60 });
status.textContent = 'Starte Gyroskop …';
gyro.onactivate = () => {
status.textContent = 'Gyroskop läuft';
status.classList.add('aktiv');
};
gyro.onerror = (e) => {
status.textContent = `Fehler: ${e.error.name}`;
};
gyro.start();
// Später Handler entfernen
// gyro.onactivate = null;
Aktivierung als Promise mit Berechtigungsprüfung und Timeout
const activateSensor = (sensor, timeoutMs = 3000) =>
new Promise((resolve, reject) => {
const controller = new AbortController();
const { signal } = controller;
const timer = setTimeout(() => {
controller.abort();
reject(new Error('Zeitüberschreitung bei der Sensor-Aktivierung'));
}, timeoutMs);
sensor.addEventListener('activate', () => {
clearTimeout(timer);
controller.abort(); // entfernt beide Listener
resolve(sensor);
}, { signal });
sensor.addEventListener('error', (e) => {
clearTimeout(timer);
controller.abort();
reject(e.error);
}, { signal });
sensor.start();
});
const main = async () => {
const perm = await navigator.permissions.query({ name: 'ambient-light-sensor' });
if (perm.state === 'denied') {
console.warn('Zugriff auf Lichtsensor verweigert.');
return;
}
const light = await activateSensor(new AmbientLightSensor());
console.log('Lichtsensor bereit, aktiviert =', light.activated);
light.onreading = () => console.log(`${light.illuminance} lx`);
};
main().catch((err) => console.error(err.name, err.message));
// Wichtig · Fallstricke
- Browser-Unterstützung: Die Generic Sensor API gibt es nur in Chromium-Browsern (Chrome, Edge, Opera, Samsung Internet). Firefox und Safari unterstützen sie nicht. Prüfen Sie die Unterstützung immer vorher, z. B. mit
'Accelerometer' in window. - Sicherer Kontext nötig: Die Sensoren funktionieren nur über HTTPS (oder
localhost). In iframes muss die Permissions Policy sie freigeben (z. B.allow="accelerometer; gyroscope"). - Kein activate im Fehlerfall: Wenn eine Berechtigung fehlt (
NotAllowedError), der Sensor nicht vorhanden ist (NotReadableError) oder die Funktion nicht unterstützt wird, kommt nurerror. Ohneerror-Handler wartet Ihre Anwendung sonst endlos. - Konstruktor kann werfen:
new Accelerometer()kann schon beim Erzeugen einenSecurityErroroderReferenceErrorauslösen. Setzen Sie ihn deshalb intry/catch. - Sichtbarkeit: Wird das Dokument unsichtbar (Tab im Hintergrund), werden die Sensoren angehalten. Ein erneutes
activatenach dem Zurückkehren ist nicht garantiert. Prüfen Sie im Zweifelsensor.activated. - Timing: Wenn Sie den Listener erst nach
start()anmelden, kann das Ereignis in seltenen Fällen schon vorbei sein. Melden Sie Listener deshalb immer vorstart()an. - Akku: Aktive Sensoren verbrauchen Strom. Rufen Sie
sensor.stop()auf, sobald Sie keine Messwerte mehr brauchen.