JavaScript-Events und API des PrivacyBee Cookie-Banners

Geändert am Mi, 27 Mai um 5:25 NACHMITTAGS

JavaScript-Events und API des PrivacyBee Cookie-Banners

Manchmal reicht es nicht, das Banner einfach nur einzubinden — du möchtest auf deiner Webseite selbst auf Consent-Ereignisse reagieren, zum Beispiel um ein Analytics-Skript nachzuladen, ein Chat-Widget zu initialisieren oder einfach mitzubekommen, wann das Banner einsatzbereit ist.

Genau dafür gibt es zwei Schnittstellen, die das Cookie-Banner nach der Einbindung (siehe Wie kann ich den Cookie-Banner von PrivacyBee in meine Website einbinden?) automatisch bereitstellt:

  1. DOM-Events auf dem document — ideal, wenn du dich nur an einer Stelle "einklinken" möchtest.
  2. Das globale window.PrivacyBee-Objekt — wenn du den aktuellen Consent-Status aktiv abfragen oder verändern willst.

Du kannst beides parallel verwenden.

Schnellüberblick

SchnittstelleTypWann sie feuert / verfügbar ist
privacybee:readyDOM-EventDas Banner hat seine Initialisierung abgeschlossen.
privacybee:consent-changedDOM-EventDer Consent ändert sich (durch Nutzer:in oder programmatisch).
window.PrivacyBeeGlobale APISteht ab dem Zeitpunkt zur Verfügung, an dem privacybee:ready feuert.

Beide DOM-Events werden auf document ausgelöst (nicht auf window) und sind CustomEvent-Instanzen mit einem detail-Objekt.


Event: privacybee:ready

Dieses Event wird einmal ausgelöst, sobald das Banner vollständig initialisiert ist — also nachdem die Konfiguration geladen, der bestehende Consent (z. B. aus dem Cookie eines früheren Besuchs) angewendet und die globale API bereitgestellt wurde. Erst ab diesem Zeitpunkt kannst du dich auf window.PrivacyBee verlassen.

document.addEventListener('privacybee:ready', (event) => {
  console.log('Verfügbare Kategorien:', event.detail.categories)
  console.log('Hat die Nutzerin/der Nutzer schon entschieden?', event.detail.hasExplicitConsent)

  // Jetzt ist es sicher, die API zu nutzen:
  if (window.PrivacyBee.getConsent('ANALYTICS_STORAGE')) {
    // Analytics-Skript nachladen
  }
})

event.detail-Struktur:

FeldTypBeschreibung
categoriesstring[]Alle verfügbaren technischen Consent-Kategorien (siehe Liste unten).
hasExplicitConsentbooleantrue, wenn die Nutzerin oder der Nutzer bereits eine bewusste Entscheidung getroffen hat. false, wenn das Banner noch sichtbar ist und auf eine Eingabe wartet.

Tipp: Registriere den Listener so früh wie möglich auf der Seite — idealerweise direkt im <head>, noch vor dem Banner-Skript. So gehst du sicher, dass du das Event nicht verpasst, falls das Banner bereits aus dem Cache lädt.


Event: privacybee:consent-changed

Wird ausgelöst, wann immer sich der Consent ändert. Das passiert in zwei Situationen:

  • Explizite Änderung: Die Nutzerin oder der Nutzer klickt auf "Alle akzeptieren", "Alle ablehnen" oder speichert eine eigene Auswahl. Auch programmatische Aufrufe wie window.PrivacyBee.acceptAll() zählen dazu.
  • Implizite Änderung: Beim Seitenaufruf wird ein bestehender Consent (z. B. aus dem Cookie der letzten Sitzung) wiederhergestellt. Das Banner ist in diesem Fall nicht sichtbar.

Du kannst die beiden Fälle über das Flag explicitConsent unterscheiden:

document.addEventListener('privacybee:consent-changed', (event) => {
  const { consents, explicitConsent } = event.detail

  if (consents.ANALYTICS_STORAGE) {
    loadAnalytics()
  }

  if (explicitConsent) {
    // Nutzer:in hat gerade aktiv eine Entscheidung getroffen — z. B. Dank-Hinweis zeigen
  }
})

event.detail-Struktur:

FeldTypBeschreibung
consentsRecord<string, boolean>Aktuelle Zustimmung pro Kategorie. Schlüssel = Kategorie-Name, Wert = true / false.
explicitConsentbooleantrue, wenn die Änderung auf einer bewussten Aktion beruht. false, wenn das Banner einen bestehenden Consent wiederherstellt.

Die globalen Kategorien

Folgende technischen Kategorien gibt das Banner aus. Die Namen entsprechen dem Google-Consent-Mode v2, was die Integration mit Google Tag Manager und ähnlichen Tools vereinfacht.

KategoriePflicht?Wofür sie steht
SECURITY_STORAGEJaSicherheitsrelevante Speicherung (z. B. Authentifizierung, Betrugsprävention). Immer true.
FUNCTIONALITY_STORAGEJaNotwendige Funktionalität (z. B. Spracheinstellung, Login-State). Immer true.
ANALYTICS_STORAGENeinReichweitenmessung, Analytics.
AD_STORAGENeinSpeicherung im Zusammenhang mit Werbung.
AD_USER_DATANeinÜbermittlung von Nutzerdaten an Werbenetzwerke.
AD_PERSONALIZATIONNeinPersonalisierte Werbung.
PERSONALIZATION_STORAGENeinPersonalisierung jenseits von Werbung (z. B. Empfehlungssysteme).

Die beiden Pflicht-Kategorien sind aus DSGVO-Sicht "berechtigtes Interesse" oder "technisch notwendig" und können vom Nutzer nicht abgewählt werden — rejectAll() lässt sie deshalb auf true.


Die API: window.PrivacyBee

Sobald privacybee:ready gefeuert hat, steht window.PrivacyBee zur Verfügung. Hier sind alle Methoden im Überblick:

Lesen

// Einzelne Kategorie abfragen
window.PrivacyBee.getConsent('ANALYTICS_STORAGE')   // → true | false

// Alle Kategorien als Objekt
window.PrivacyBee.getAllConsents()
// → {
//     SECURITY_STORAGE: true,
//     FUNCTIONALITY_STORAGE: true,
//     ANALYTICS_STORAGE: false,
//     AD_STORAGE: false,
//     …
//   }

// Hat die Nutzerin/der Nutzer bereits eine bewusste Entscheidung getroffen?
window.PrivacyBee.hasExplicitConsent()   // → true | false

Auf Änderungen reagieren

Eine Alternative zum DOM-Event privacybee:consent-changed — funktional gleichwertig, dafür mit einem etwas kürzeren Aufruf:

window.PrivacyBee.onConsentChange((consents) => {
  if (consents.ANALYTICS_STORAGE) {
    // …
  }
})

Du kannst beliebig viele Callbacks registrieren; alle werden bei jeder Änderung aufgerufen.

Schreiben

Diese Methoden ändern den Consent programmatisch und lösen anschliessend privacybee:consent-changed mit explicitConsent: true aus. Setze sie nur ein, wenn du wirklich eine bewusste Nutzeraktion abbildest (etwa über einen eigenen "Cookie-Einstellungen"-Button im Footer).

// Alle nicht-essentiellen Kategorien aktivieren
window.PrivacyBee.acceptAll()

// Alle nicht-essentiellen Kategorien deaktivieren
window.PrivacyBee.rejectAll()

// Komplettes Set explizit setzen (alle Kategorien müssen angegeben werden)
window.PrivacyBee.setAllConsents({
  SECURITY_STORAGE: true,
  FUNCTIONALITY_STORAGE: true,
  ANALYTICS_STORAGE: true,
  AD_STORAGE: false,
  AD_USER_DATA: false,
  AD_PERSONALIZATION: false,
  PERSONALIZATION_STORAGE: false,
})

Debugging

Du kannst dir die Events live in der Konsole anzeigen lassen:

document.addEventListener('privacybee:ready', console.log)
document.addEventListener('privacybee:consent-changed', console.log)

Häufige Fragen

Auf welchem Element werden die Events ausgelöst — window oder document?
Auf document. window.addEventListener('privacybee:ready', …) wird nicht funktionieren.

Kann ich die Events stoppen oder verhindern (preventDefault)?
Nein, sie sind nicht cancelable. Sie sind reine Benachrichtigungen.

Was passiert, wenn ich window.PrivacyBee benutze, bevor privacybee:ready gefeuert hat?
Dann ist das Objekt schlicht undefined. Verlasse dich nur innerhalb deines privacybee:ready-Handlers (oder danach) darauf.

Bekomme ich auch ein Event, wenn das Banner gar nicht angezeigt wird (weil der Consent bereits gespeichert ist)?
Ja. privacybee:ready feuert immer, sobald die Initialisierung abgeschlossen ist — unabhängig davon, ob das Banner sichtbar wird oder nicht. Wenn ein gespeicherter Consent wiederhergestellt wird, feuert zusätzlich privacybee:consent-changed mit explicitConsent: false.

Ich nutze Google Tag Manager. Muss ich die Events selbst weitergeben?
Nein. Das Cookie-Banner integriert sich automatisch mit GTM und übermittelt die Consent-Zustände im Google-Consent-Mode-v2-Format. Du kannst die Events natürlich trotzdem für eigene Zwecke nutzen.


Wenn du eine Integration baust, die hier nicht abgedeckt ist, melde dich gern bei unserem Support — wir helfen dir weiter und erweitern diese Dokumentation laufend.

War dieser Artikel hilfreich?

Das ist großartig!

Vielen Dank für das Feedback

Leider konnten wir nicht helfen

Vielen Dank für das Feedback

Wie können wir diesen Artikel verbessern?

Wählen Sie wenigstens einen der Gründe aus

Feedback gesendet

Wir wissen Ihre Bemühungen zu schätzen und werden versuchen, den Artikel zu korrigieren