Signatur
Beschreibung
Die Methode clear() der Schnittstelle SharedStorage entfernt alle Schlüssel-Wert-Paare, die der aktuelle Ursprung im Shared Storage abgelegt hat. Shared Storage gehört zur Privacy Sandbox. Anders als localStorage ist er nicht nach Top-Level-Site getrennt: Ein Ursprung kann dort Daten über mehrere Websites hinweg speichern. Diese Daten lassen sich aber nur in einer abgeschotteten Umgebung, dem Shared Storage Worklet, lesen.
Aufrufen kannst du clear() an zwei Stellen: im Hauptkontext über window.sharedStorage.clear() (Schnittstelle WindowSharedStorage) oder innerhalb einer Worklet-Operation über das globale sharedStorage-Objekt (Schnittstelle WorkletSharedStorage). Die Methode eignet sich, um Zustand vollständig zurückzusetzen, etwa beim Widerruf der Einwilligung, beim Start einer neuen A/B-Test-Kampagne oder beim Wechsel auf ein neues Datenschema.
Einzelne Einträge entfernst du besser mit delete(key). clear() betrifft immer den gesamten Speicher des Ursprungs, der die Methode aufruft. Bei Iframes oder Skripten von Dritten ist das der Ursprung des ausführenden Kontexts, nicht zwingend der Ursprung der Seite.
Rückgabewert
Promise, das mit undefined erfüllt wird, sobald der Löschauftrag angenommen wurde. Es wird mit einem TypeError abgelehnt, wenn Shared Storage nicht verfügbar ist, zum Beispiel wegen fehlender Registrierung (Enrollment) oder weil der Nutzer die Privacy-Sandbox-Einstellungen deaktiviert hat.Beispiele
Gemeinsamen Speicher beim Widerruf der Einwilligung leeren
const widerrufeEinwilligung = async () => {
if (!('sharedStorage' in window)) {
console.log('Shared Storage wird nicht unterstützt.');
return;
}
try {
await window.sharedStorage.clear();
console.log('Alle Shared-Storage-Daten wurden gelöscht.');
} catch (err) {
console.error('Löschen fehlgeschlagen:', err.message);
}
};
document.querySelector('#consent-revoke')
.addEventListener('click', widerrufeEinwilligung);
Zurücksetzen innerhalb einer Worklet-Operation
// reset-worklet.js – wird per sharedStorage.worklet.addModule() geladen
class ResetOperation {
async run(data) {
const version = await sharedStorage.get('schema-version');
if (version !== data.expectedVersion) {
// Veraltetes Datenschema: kompletten Speicher verwerfen
await sharedStorage.clear();
await sharedStorage.set('schema-version', data.expectedVersion);
}
}
}
register('reset-if-outdated', ResetOperation);
// main.js – im Hauptkontext
await window.sharedStorage.worklet.addModule('/reset-worklet.js');
await window.sharedStorage.run('reset-if-outdated', {
data: { expectedVersion: '2' },
});
Neue A/B-Test-Kampagne mit sauberem Speicher starten
const starteKampagne = async (kampagnenId) => {
await window.sharedStorage.clear();
// Nutzer zufällig einer Gruppe zuweisen, ignoreIfPresent verhindert Überschreiben
const gruppe = Math.random() < 0.5 ? 'A' : 'B';
await window.sharedStorage.set('kampagne', kampagnenId);
await window.sharedStorage.set('gruppe', gruppe, { ignoreIfPresent: true });
console.log(`Kampagne ${kampagnenId} gestartet`);
};
starteKampagne('herbst-2024');
// Wichtig · Fallstricke
- Kompatibilität: Die Methode ist experimentell und nur in Chromium-Browsern verfügbar. Firefox und Safari unterstützen Shared Storage nicht. Google hat angekündigt, mehrere Privacy-Sandbox-APIs einzustellen. Prüfe deshalb immer mit
'sharedStorage' in windowund plane einen Fallback ein. - Registrierung erforderlich: Ohne Privacy-Sandbox-Enrollment und Attestierung des aufrufenden Ursprungs wird das
Promiseabgelehnt. Lokal testen lässt sich die API über Chrome-Flags. - Kein Lesezugriff außerhalb des Worklets: Im Hauptkontext kannst du nach
clear()nicht direkt prüfen, ob der Speicher leer ist.get()gibt es nur im Worklet. - Ursprung beachten:
clear()löscht nur die Daten des Ursprungs, der das Skript ausführt. In eingebetteten Iframes von Drittanbietern ist das deren Ursprung. - Alternative per HTTP-Header: Der Speicher lässt sich auch serverseitig leeren. Dazu setzt du beim Request
fetch(url, { sharedStorageWritable: true }), und der Server antwortet mit dem HeaderShared-Storage-Write: clear. - Die Operation lässt sich nicht rückgängig machen. Wenn du nur einzelne Schlüssel entfernen willst, nimm
delete().