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:
eventcart add und Cart add sind unterschiedliche Ereignisse.eventInfoeventInfo an Listener, speichert sie jedoch nicht im berechneten Status.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.
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:
adobeDataLayer:eventadobeDataLayer:change{ page: { title: "Home" } }{ event: "click" }eventInfo, z. B. { event: "click", eventInfo: {...} }{ event: "cart add", cart: {...} }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 verweistthisauf dasadobeDataLayer-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.