Signatur
Beschreibung
dischargingTime ist eine schreibgeschützte Eigenschaft des BatteryManager-Objekts, das die Battery Status API liefert. Sie gibt die vom System geschätzte Zeit in Sekunden an, bis der Akku ganz leer ist.
Der Wert ist Infinity, wenn das Gerät gerade lädt (charging === true), wenn kein Akku vorhanden ist (z. B. bei einem Desktop-PC) oder wenn das System noch keine Schätzung berechnet hat. Kurz nach dem Abziehen des Ladekabels steht der Wert deshalb oft noch eine Weile auf Infinity.
Einen Zugriff auf das BatteryManager-Objekt bekommt man über navigator.getBattery(). Ändert sich der Wert, wird das Event dischargingtimechange ausgelöst. Typische Einsatzzwecke sind Energiesparmodi in Web-Apps, z. B. Animationen, Polling oder Hintergrund-Synchronisation zu drosseln, wenn die Restlaufzeit knapp wird.
Rückgabewert
number (ganzzahlig oder Infinity). Infinity heißt: das Gerät lädt, es gibt keinen Akku oder es liegt noch keine Schätzung vor.Beispiele
Restlaufzeit auslesen und formatieren
const formatDuration = (seconds) => {
if (!Number.isFinite(seconds)) return 'unbekannt / lädt';
const h = Math.floor(seconds / 3600);
const m = Math.floor((seconds % 3600) / 60);
return `${h} h ${m} min`;
};
const showRemaining = async () => {
if (!('getBattery' in navigator)) {
console.log('Battery Status API nicht unterstützt');
return;
}
const battery = await navigator.getBattery();
console.log(`Restlaufzeit: ${formatDuration(battery.dischargingTime)}`);
};
showRemaining();
Auf Änderungen mit dischargingtimechange reagieren
const battery = await navigator.getBattery();
const onTimeChange = () => {
const t = battery.dischargingTime;
console.log(Number.isFinite(t)
? `Noch ca. ${Math.round(t / 60)} Minuten`
: 'Keine Entladeschätzung (lädt oder unbekannt)');
};
battery.addEventListener('dischargingtimechange', onTimeChange);
// Alternative über die on-Property:
// battery.ondischargingtimechange = onTimeChange;
onTimeChange();
// Später wieder abmelden:
// battery.removeEventListener('dischargingtimechange', onTimeChange);
Energiesparmodus bei knapper Restlaufzeit aktivieren
const LOW_THRESHOLD = 15 * 60; // 15 Minuten
const battery = await navigator.getBattery();
const updatePowerMode = () => {
const lowPower = !battery.charging &&
Number.isFinite(battery.dischargingTime) &&
battery.dischargingTime < LOW_THRESHOLD;
document.documentElement.classList.toggle('power-saving', lowPower);
console.log(lowPower ? 'Energiesparmodus AN' : 'Normalbetrieb');
};
battery.addEventListener('dischargingtimechange', updatePowerMode);
battery.addEventListener('chargingchange', updatePowerMode);
updatePowerMode();
// Wichtig · Fallstricke
- Browser-Kompatibilität: Nur in Chromium-basierten Browsern verfügbar. Firefox hat die API aus Datenschutzgründen entfernt (ab Version 52 für Webinhalte), Safari hat sie nie eingebaut. Deshalb immer vorher mit
'getBattery' in navigatorprüfen. - Sicherer Kontext:
navigator.getBattery()funktioniert nur über HTTPS (bzw.localhost). Eine Permissions Policy (battery) kann den Zugriff zusätzlich einschränken, z. B. in iframes. Infinityrichtig behandeln: Nicht direkt rechnen oder anzeigen –Math.round(Infinity / 60)ergibtInfinity. Vorher mitNumber.isFinite()prüfen.- Nur eine Schätzung: Der Wert kommt vom Betriebssystem, schwankt je nach Last stark und wird aus Datenschutzgründen oft gerundet oder nur selten aktualisiert. Für exakte Berechnungen taugt er nicht.
- Datenschutz: Akkuwerte wurden früher für Fingerprinting missbraucht. Nutze sie also nur für echte Verbesserungen der Nutzererfahrung.