Signatur
Beschreibung
Mit navigator.storage.persisted() fragen Sie ab, ob der Speicher des aktuellen Ursprungs (IndexedDB, Cache API, OPFS, Service-Worker-Registrierungen usw.) im Modus persistent läuft. Ist das der Fall, löscht der Browser diese Daten bei Speicherknappheit nicht automatisch. Nur der Nutzer kann sie dann entfernen, zum Beispiel über die Browsereinstellungen.
Standardmäßig ist Speicher im Modus best-effort: Wird der Platz knapp, darf der Browser die Daten ohne Rückfrage verwerfen, meist nach dem LRU-Prinzip (die am längsten nicht genutzten zuerst). Für Offline-Apps, lokale Entwürfe oder heruntergeladene Medien ist das riskant. Mit persisted() prüfen Sie den aktuellen Zustand, bevor Sie gegebenenfalls über persist() den persistenten Modus anfordern.
Die Methode verändert nichts und zeigt dem Nutzer keinen Dialog. Sie eignet sich deshalb gut für Statusanzeigen, für die Diagnose oder als Vorabprüfung, damit Sie persist() nicht unnötig aufrufen.
Rückgabewert
true auflöst, wenn der Speicher persistent ist, sonst zu false (Modus best-effort). Wird mit TypeError abgelehnt, wenn der Ursprung keinen Zugriff auf Speicher hat, etwa bei einem opaken Ursprung.Beispiele
Persistenz-Status abfragen
const checkPersistence = async () => {
if (!navigator.storage?.persisted) {
console.log('StorageManager API nicht verfügbar');
return;
}
const isPersisted = await navigator.storage.persisted();
console.log(`Speicher persistent: ${isPersisted}`);
};
checkPersistence();
Nur bei Bedarf Persistenz anfordern
const ensurePersistentStorage = async () => {
// Erst prüfen, dann gezielt anfordern
if (await navigator.storage.persisted()) {
return true;
}
const granted = await navigator.storage.persist();
console.log(granted
? 'Persistenter Speicher wurde gewährt.'
: 'Speicher bleibt im Modus best-effort.');
return granted;
};
// Zum Beispiel nach dem ersten Speichern eines Offline-Dokuments
document.querySelector('#save-offline')
?.addEventListener('click', ensurePersistentStorage);
Status zusammen mit der Speichernutzung anzeigen
const showStorageInfo = async () => {
const [persisted, { usage, quota }] = await Promise.all([
navigator.storage.persisted(),
navigator.storage.estimate()
]);
const mb = (bytes) => (bytes / 1024 / 1024).toFixed(1);
console.log(`Modus: ${persisted ? 'persistent' : 'best-effort'}`);
console.log(`Belegt: ${mb(usage)} MB von ${mb(quota)} MB`);
};
showStorageInfo();
// Wichtig · Fallstricke
- Nur in sicheren Kontexten:
navigator.storagegibt es nur unter HTTPS oderlocalhost. Prüfen Sie vor dem Aufruf, ob die API vorhanden ist. - Auch in Workern verfügbar: über
self.navigator.storage.persisted(), zum Beispiel im Service Worker. - Persistent heißt nicht unlöschbar: Der Nutzer kann die Daten weiterhin manuell löschen. Im privaten Modus werden sie beim Schließen trotzdem verworfen.
- Unterschiede zwischen Browsern: Chrome entscheidet über
persist()anhand von Heuristiken wie Lesezeichen, Installation als PWA oder Nutzungsintensität, ohne Dialog. Firefox fragt den Nutzer. Safari wendet zusätzlich eigene Löschregeln an (ITP, 7-Tage-Grenze für Skript-Speicher bei nicht installierten Web-Apps). Verlassen Sie sich deshalb nie allein auftrue. - Der Status kann sich zwischen zwei Sitzungen ändern, etwa wenn der Nutzer die Berechtigung zurückzieht. Fragen Sie ihn daher nach Bedarf erneut ab, statt ihn dauerhaft zwischenzuspeichern.
localStorageundsessionStoragegehören ebenfalls zum Speicherbereich des Ursprungs. Für größere Datenmengen empfiehlt sich trotzdem IndexedDB.