Start · Sprachen · JavaScript · Referenz · BatteryManager.charging

BatteryManager.charging

Eigenschaft

Schreibgeschützter Boolean, der angibt, ob der Akku des Geräts gerade geladen wird (<code>true</code>) oder nicht (<code>false</code>).

seit JavaScript Chromium-Browser (Chrome 38+, Edge 79+, Opera); ni Kategorie: webapi

Signatur

BatteryManager.charging

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

Typ
boolean
Beschreibung
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();
Wird geladen: ja

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);
Akkubetrieb Netzteil angeschlossen

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;
Sync-Intervall: 300 s

// 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-Policy battery den Zugriff in iframes sperren.
  • Schreibgeschützt: Eine Zuweisung wie battery.charging = false wird still ignoriert (im Strict Mode gibt es einen TypeError).
  • Kein verlässliches Signal: Geräte ohne Akku melden meist true. Aus charging === true folgt also nicht, dass ein Akku vorhanden ist. Kombiniere den Wert bei Bedarf mit level und chargingTime.
  • Datenschutz: Akkudaten wurden früher zum Fingerprinting missbraucht. Nutze sie nur für echte Energiespar-Optimierungen und nicht für Tracking.