Start · Sprachen · JavaScript · Referenz · CacheStorage.delete()

CacheStorage.delete()

Methode

Löscht den benannten <code>Cache</code> aus dem <code>CacheStorage</code> und liefert ein Promise, das zu <code>true</code> (gelöscht) oder <code>false</code> (nicht gefunden) aufgelöst wird.

seit JavaScript Baseline: alle modernen Browser (seit 2018); nur i Kategorie: webapi

Signatur

CacheStorage.prototype.delete(cacheName)

Beschreibung

Die Methode delete() der Schnittstelle CacheStorage sucht den Cache mit dem Namen cacheName. Findet sie ihn, wird er samt allen gespeicherten Anfrage-/Antwort-Paaren entfernt und das zurückgegebene Promise wird zu true aufgelöst. Gibt es keinen Cache mit diesem Namen, wird das Promise zu false aufgelöst – es wird also kein Fehler geworfen.

Zugriff erhält man über das globale caches-Objekt (window.caches bzw. self.caches im Service Worker). Der typische Einsatzort ist das activate-Ereignis eines Service Workers: Dort werden veraltete Cache-Versionen (z. B. static-v1, nachdem static-v2 installiert wurde) aufgeräumt, damit der Speicher nicht unbegrenzt wächst.

Man kann delete() auch direkt im Fenster-Kontext aufrufen, etwa für eine Schaltfläche „Offline-Daten löschen“ oder beim Abmelden eines Nutzers, damit keine persönlichen Antworten im Cache zurückbleiben.

Parameter

Name Typ Default Beschreibung
$cacheName Pflicht string Name des zu löschenden Caches – exakt so, wie er bei caches.open() vergeben wurde (Groß-/Kleinschreibung wird beachtet).

Rückgabewert

Typ
Promise<boolean>
Beschreibung
Wird zu true aufgelöst, wenn der Cache gefunden und gelöscht wurde, sonst zu false.

Beispiele

Einzelnen Cache löschen

const geloescht = await caches.delete('bilder-v1');
console.log(geloescht ? 'Cache entfernt' : 'Cache existierte nicht');
Cache entfernt

Alte Cache-Versionen im Service Worker aufräumen

// sw.js
const AKTUELLE_CACHES = ['static-v3', 'api-v2'];

self.addEventListener('activate', (event) => {
  event.waitUntil((async () => {
    const namen = await caches.keys();
    await Promise.all(
      namen
        .filter((name) => !AKTUELLE_CACHES.includes(name))
        .map((name) => {
          console.log('Lösche veralteten Cache:', name);
          return caches.delete(name);
        })
    );
    await self.clients.claim();
  })());
});
Lösche veralteten Cache: static-v2 Lösche veralteten Cache: api-v1

Alle Offline-Daten beim Abmelden entfernen

const alleCachesLoeschen = async () => {
  if (!('caches' in window)) return 0;
  const namen = await caches.keys();
  const ergebnisse = await Promise.all(namen.map((n) => caches.delete(n)));
  return ergebnisse.filter(Boolean).length;
};

document.querySelector('#logout').addEventListener('click', async () => {
  const anzahl = await alleCachesLoeschen();
  console.log(`${anzahl} Cache(s) gelöscht`);
});
3 Cache(s) gelöscht

// Wichtig · Fallstricke

  • Kein Fehler bei unbekanntem Namen: Existiert der Cache nicht, lautet das Ergebnis false. Tippfehler im Namen fallen daher leicht nicht auf – Rückgabewert prüfen.
  • Nicht verwechseln mit Cache.prototype.delete(request), das nur einen einzelnen Eintrag innerhalb eines Caches entfernt.
  • Sicherer Kontext: caches ist nur über HTTPS (oder localhost) verfügbar; in manchen privaten Modi (ältere Firefox-Versionen) wirft der Zugriff einen SecurityError. Vorher mit 'caches' in self prüfen.
  • Service Worker: Aufräumarbeiten in activate immer in event.waitUntil() kapseln, sonst kann der Worker beendet werden, bevor das Löschen abgeschlossen ist.
  • Der CacheStorage ist pro Origin geteilt – ein Löschen wirkt sich auf alle Tabs und den Service Worker derselben Origin aus. Offene Referenzen auf ein gelöschtes Cache-Objekt bleiben zwar nutzbar, der Cache ist aber nicht mehr über caches.open() erreichbar.