Ereignisse

Ereignisse teilen anderen Skripten mit, dass etwas auf der Seite passiert ist, z. B. eine Seitenansicht, ein Klick oder eine Formularübermittlung. Sie pushen ein Ereignis als Objekt mit einem event an die Adobe Client-Datenschicht (ACDL). Skripte, die einen Ereignis-Listener für diesen Ereignisnamen registriert haben, werden aufgerufen.

Ereignisobjekte event-objects

Ein Ereignisobjekt hat die folgenden Schlüssel:

Schlüssel
Erforderlich
Beschreibung
event
Ja
Eine nicht leere Zeichenfolge, die das Ereignis benennt. Bei Ereignisnamen wird zwischen Groß- und Kleinschreibung unterschieden: cart add und Cart add sind unterschiedliche Ereignisse.
eventInfo
Nein
Alle zusätzlichen Informationen über dieses Auftreten des Ereignisses, z. B. ein Verweis auf die Komponente, auf die der Besucher geklickt hat. ACDL übergibt eventInfo an Listener, speichert sie jedoch nicht im berechneten Status.
Beliebiger anderer Schlüssel
Nein
Daten, die mit dem berechneten Status zusammengeführt werden sollen, wobei dieselben Regeln wie für einen Daten-Push verwendet werden.
window.adobeDataLayer = window.adobeDataLayer || [];

// An event with no data
window.adobeDataLayer.push({ event: "page loaded" });

// An event with extra information for listeners
window.adobeDataLayer.push({
  event: "click",
  eventInfo: { reference: "component.hero-1" }
});

// An event that also updates the computed state
window.adobeDataLayer.push({
  event: "cart add",
  eventInfo: { sku: "a-100" },
  cart: { itemCount: 3 }
});

Nach diesen Push-Vorgängen wird der berechnete Status { cart: { itemCount: 3 } }. Die event- und eventInfo sind nicht Teil des berechneten Status, aber die Ereignisobjekte verbleiben im Datenschicht-Array als History.

Wenn der event Schlüssel fehlt, leer ist oder keine Zeichenfolge ist, behandelt ACDL das Objekt als Daten-Push. Es werden keine Ereignis-Listener aufgerufen, und der berechnete Status umfasst nicht die event oder eventInfo Schlüssel.

TIP
Wählen Sie eine Namenskonvention für Ereignisse aus, z. B. noun verb (cart add, form submit) oder object.action (cart.add, form.submit), und verwenden Sie sie überall. Da bei Namen zwischen Groß- und Kleinschreibung unterschieden wird, sind inkonsistente Namen ein häufiger Grund dafür, dass Listener nicht ausgeführt werden.

Integrierte Ereignisse built-in-events

Zusätzlich zum genannten Ereignis stellt ACDL zwei integrierte Trigger zur Verfügung:

  • adobeDataLayer:change: Wird ausgelöst, wenn ein Push den berechneten Status ändert. Daten-Push und Ereignis-Push-Benachrichtigungen, die Daten-Trigger enthalten.
  • adobeDataLayer:event: Wird für jede Ereignis-Push-Benachrichtigung ausgelöst, unabhängig vom Namen.

Die folgende Tabelle zeigt, welche Ereignisse die einzelnen Push-Trigger betreffen:

Push-Benachrichtigung
adobeDataLayer:event
adobeDataLayer:change
Benanntes Ereignis
Nur Daten, z. B. { page: { title: "Home" } }
Nein
Ja
Nein
Nur Ereignis, z. B. { event: "click" }
Ja
Nein
Ja
Ereignis und eventInfo, z. B. { event: "click", eventInfo: {...} }
Ja
Nein
Ja
Ereignis und Daten, z. B. { event: "cart add", cart: {...} }
Ja
Ja
Ja

Wenn ein Push-Trigger mehr als ein Ereignis auslöst, ruft ACDL die Listener in der folgenden Reihenfolge auf: adobeDataLayer:event, dann adobeDataLayer:change, dann das benannte Ereignis.

Was Listener erhalten listener-arguments

ACDL ruft jeden Listener mit einem Argument auf: einer Kopie des gesamten gepushten Objekts, einschließlich event, eventInfo und Daten.

window.adobeDataLayer.push(function(dl) {
  dl.addEventListener("cart add", function(event) {
    console.log(event.eventInfo.sku);       // "a-100"
    console.log(event.cart.itemCount);      // 3
    console.log(dl.getState("cart"));       // { itemCount: 3 }
  });
});

Die folgenden Details gelten für jeden Listener:

  • Der berechnete Status wurde bereits aktualisiert. Wenn ein Listener ausgeführt wird, enthält der berechnete Status bereits die Daten von der Push-Benachrichtigung, die ihn ausgelöst hat.
  • Das Argument ist eine Kopie. Wenn Sie sie ändern, ändert sich weder die Datenschicht noch das Objekt, das gepusht wurde.
  • thisist die Datenschicht. Innerhalb einer Listener-Funktion verweist this auf das adobeDataLayer-Array.
  • Listener werden synchron ausgeführt. ACDL ruft jeden Listener auf, bevor push() zurückgibt. Halten Sie die Zuhörer kurz und führen Sie keine langsame Arbeit in ihnen aus.

Vergangene und zukünftige Ereignisse anhören scope

Standardmäßig wird ein neuer Listener für übereinstimmende Ereignisse ausgeführt, die sich bereits im Datenschicht-Array befinden, sowie für übereinstimmende Ereignisse, die später gepusht werden. Dieses Verhalten bedeutet, dass ein Skript seinen Listener jederzeit hinzufügen kann, ohne zuvor eingetretene Ereignisse zu verpassen, z. B. einen Seitenaufruf, der gepusht wurde, bevor die Tag-Bibliothek geladen wurde.

Sie können dieses Verhalten mit der Option scope ändern, um nur vergangene oder nur zukünftige Ereignisse zu überwachen. Informationen dazu, wie ACDL vergangene Ereignisse speichert, finden Sie unter Warteschlange und Verlauf.

Vermeiden von Endlosschleifen loops

Ein Listener kann auf die Datenschicht pushen. ACDL-Prozesse, die sofort übertragen werden, bevor der Listener zurückkehrt. Wenn ein Listener etwas pusht, das denselben Listener erneut Trigger, enden die Aufrufe nie, bis der Browser einen Stack-Überlauffehler ausgibt, z. B. RangeError: Maximum call stack size exceeded. Beispielsweise ein adobeDataLayer:change-Listener, der Daten-Trigger selbst überträgt.

Push von einem Listener nur dann, wenn der neue Push nicht denselben Listener in Trigger setzen kann.

recommendation-more-help
experience-platform-help-collection