Signatur
Beschreibung
Die schreibgeschützte Eigenschaft worklet des Interfaces WindowSharedStorage (erreichbar über window.sharedStorage.worklet) enthält die SharedStorageWorklet-Instanz, die das Shared Storage Worklet des aktuellen Ursprungs darstellt. Sie ist Teil der Shared Storage API aus Googles Privacy Sandbox.
Über diese Instanz lädst du mit addModule() ein Worklet-Skript. Darin registrierst du mit register() Operationen, die Daten aus dem Shared Storage lesen. Anschließend startest du sie aus dem Hauptkontext mit window.sharedStorage.run() (Output Gate „Private Aggregation“) oder window.sharedStorage.selectURL() (Output Gate „URL-Auswahl“ für Fenced Frames). Nur so lassen sich gespeicherte Daten auswerten. Aus dem Hauptkontext heraus kannst du Shared-Storage-Daten nämlich schreiben, aber nicht direkt lesen.
Typische Einsätze sind datenschutzfreundliche Anwendungsfälle über mehrere Websites hinweg ohne Drittanbieter-Cookies, zum Beispiel A/B-Tests, das Begrenzen der Anzeigehäufigkeit (Frequency Capping) oder das Zählen eindeutiger Reichweite.
Rückgabewert
SharedStorageWorklet-Instanz des aktuellen Ursprungs. Pro Seitenkontext ist es immer dieselbe Instanz.Beispiele
Worklet-Modul laden und Operation ausführen
// Hauptskript (z. B. main.js)
const initExperiment = async () => {
if (!('sharedStorage' in window)) {
console.log('Shared Storage wird nicht unterstützt');
return;
}
// Gruppe nur setzen, falls noch nicht vorhanden
await window.sharedStorage.set('ab-gruppe', String(Math.floor(Math.random() * 2)), {
ignoreIfPresent: true
});
// Worklet-Modul über die worklet-Eigenschaft laden
await window.sharedStorage.worklet.addModule('/worklets/reach.js');
// Registrierte Operation ausführen
await window.sharedStorage.run('reach-messen', { data: { kampagne: 42 } });
console.log('Operation gestartet');
};
initExperiment();
Zugehöriges Worklet-Skript (/worklets/reach.js)
// Läuft im SharedStorageWorkletGlobalScope
class ReachOperation {
async run(data) {
// Im Worklet ist das Lesen erlaubt
const gruppe = await sharedStorage.get('ab-gruppe');
// Ergebnis nur aggregiert über Private Aggregation melden
privateAggregation.contributeToHistogram({
bucket: BigInt(data.kampagne * 10 + Number(gruppe)),
value: 1
});
}
}
register('reach-messen', ReachOperation);
URL-Auswahl für einen Fenced Frame
const waehleCreative = async () => {
const { worklet } = window.sharedStorage;
await worklet.addModule('/worklets/ab-test.js');
// Das Worklet registriert eine Operation 'creative-waehlen',
// die den Index der gewünschten URL zurückgibt
const config = await window.sharedStorage.selectURL(
'creative-waehlen',
[{ url: '/ads/variante-a.html' }, { url: '/ads/variante-b.html' }],
{ resolveToConfig: true }
);
const frame = document.createElement('fencedframe');
frame.config = config;
document.body.append(frame);
};
waehleCreative();
// Wichtig · Fallstricke
- Experimentell und eingestellt: Die API gibt es nur in Chromium-Browsern im Rahmen der Privacy Sandbox. Google hat angekündigt, die Privacy-Sandbox-APIs auslaufen zu lassen. Firefox und Safari unterstützen sie nicht. Prüfe deshalb immer mit
'sharedStorage' in window, ob die API vorhanden ist. - Anmeldung (Enrollment) und Freigabe nötig: Ohne Privacy-Sandbox-Enrollment des Ursprungs und ohne passende Permissions-Policy (
shared-storage) schlagenaddModule(),run()undselectURL()fehl. Die Aufrufe werden auch blockiert, wenn der Nutzer die Werbe-Privatsphäre-Einstellungen deaktiviert hat. addModule()darfst du pro Worklet in der Regel nur einmal aufrufen. Ein zweiter Aufruf wird abgelehnt. Fasse deshalb alle Operationen in einem Modul zusammen.- Das Worklet-Skript läuft standardmäßig im Kontext des Ursprungs, von dem das Modul geladen wird. Ursprungsübergreifende Worklets erzeugst du über
window.sharedStorage.createWorklet(). Das Skript braucht dann passende CORS-Header. - Die Eigenschaft ist schreibgeschützt. Eine Zuweisung an
worklethat keine Wirkung (im Strict Mode gibt es einenTypeError). - Nur verfügbar in sicheren Kontexten (HTTPS).