Signatur
Beschreibung
Die Eigenschaft charging des BatteryManager-Objekts gibt an, ob das Gerät gerade am Stromnetz hängt und der Akku geladen wird. Ein BatteryManager entsteht nicht per Konstruktor, sondern über das Promise von navigator.getBattery().
Typische Einsatzfälle sind stromsparende Anwendungen: Aufwendige Aufgaben wie Hintergrund-Synchronisation, Animationen, Video-Vorabladen oder häufiges Abfragen des Servers werden verschoben oder gedrosselt, solange das Gerät im Akkubetrieb läuft. Steckt es am Netz, lassen sie sich wieder in vollem Umfang ausführen.
Der Wert ändert sich zur Laufzeit. Deshalb sollte man auf das Ereignis chargingchange reagieren (über addEventListener("chargingchange", …) oder die Eigenschaft onchargingchange), statt den Wert einmalig auszulesen. Ist ein Gerät ganz ohne Akku (z. B. ein Desktop-PC) oder kann der Browser den Zustand nicht bestimmen, liefert die Implementierung in der Regel true bei level = 1.
Rückgabewert
true, wenn der Akku geladen wird oder das Gerät keinen Akku hat bzw. den Zustand nicht meldet; false, wenn das Gerät im Akkubetrieb entladen wird.Beispiele
Ladezustand einmalig auslesen
const zeigeLadestatus = async () => {
if (!('getBattery' in navigator)) {
console.log('Battery Status API wird nicht unterstützt.');
return;
}
const battery = await navigator.getBattery();
console.log(`Wird geladen: ${battery.charging ? 'ja' : 'nein'}`);
};
zeigeLadestatus();
Auf Änderungen mit addEventListener reagieren
const battery = await navigator.getBattery();
const aktualisiereAnzeige = () => {
document.body.dataset.power = battery.charging ? 'netz' : 'akku';
console.log(battery.charging ? 'Netzteil angeschlossen' : 'Akkubetrieb');
};
aktualisiereAnzeige();
battery.addEventListener('chargingchange', aktualisiereAnzeige);
// Später, z. B. beim Verlassen der Ansicht, wieder abmelden:
// battery.removeEventListener('chargingchange', aktualisiereAnzeige);
Hintergrund-Synchronisation im Akkubetrieb drosseln
const battery = await navigator.getBattery();
let timerId;
const synchronisiere = () => fetch('/api/sync', { method: 'POST' });
const planeSync = () => {
clearInterval(timerId);
// am Netz alle 30 s, im Akkubetrieb nur alle 5 min
const intervall = battery.charging ? 30_000 : 300_000;
timerId = setInterval(synchronisiere, intervall);
console.log(`Sync-Intervall: ${intervall / 1000} s`);
};
planeSync();
// Alternative zur addEventListener-Variante: on-Eigenschaft
battery.onchargingchange = planeSync;
// Wichtig · Fallstricke
- Browser-Kompatibilität: Die Battery Status API gibt es nur in Chromium-basierten Browsern. Firefox hat sie aus Datenschutzgründen entfernt (ab Version 52 nicht mehr für Webinhalte verfügbar), Safari hat sie nie umgesetzt. Prüfe die Unterstützung immer mit
'getBattery' in navigator. - Nur in sicheren Kontexten:
navigator.getBattery()steht nur unter HTTPS (bzw.localhost) zur Verfügung. Zusätzlich kann die Permissions-Policybatteryden Zugriff in iframes sperren. - Schreibgeschützt: Eine Zuweisung wie
battery.charging = falsewird still ignoriert (im Strict Mode gibt es einenTypeError). - Kein verlässliches Signal: Geräte ohne Akku melden meist
true. Auscharging === truefolgt also nicht, dass ein Akku vorhanden ist. Kombiniere den Wert bei Bedarf mitlevelundchargingTime. - Datenschutz: Akkudaten wurden früher zum Fingerprinting missbraucht. Nutze sie nur für echte Energiespar-Optimierungen und nicht für Tracking.