Start · Sprachen · JavaScript · Referenz · WindowSharedStorage.worklet

WindowSharedStorage.worklet

Eigenschaft

Schreibgeschützte Eigenschaft, die die <code>SharedStorageWorklet</code>-Instanz für den aktuellen Ursprung liefert, über die Worklet-Module geladen werden.

seit JavaScript Experimentell: nur Chromium-Browser (Chrome 115+, deprecated seit ja Kategorie: webapi

Signatur

WindowSharedStorage.worklet

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

Typ
SharedStorageWorklet
Beschreibung
Die 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();
Operation gestartet

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) schlagen addModule(), run() und selectURL() 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 worklet hat keine Wirkung (im Strict Mode gibt es einen TypeError).
  • Nur verfügbar in sicheren Kontexten (HTTPS).