Eventi
Gli eventi segnalano ad altri script che si è verificato un problema nella pagina, ad esempio la visualizzazione di una pagina, un clic o l’invio di un modulo. Invio di un evento a Adobe Client Data Layer (ACDL) come oggetto con una chiave event. Vengono chiamati gli script che hanno registrato un listener di eventi per tale nome di evento.
Oggetti evento event-objects
Un oggetto evento ha le seguenti chiavi:
eventcart add e Cart add sono eventi diversi.eventInfoeventInfo ai listener ma non lo memorizza nello stato calcolato.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 }
});
Dopo questi push, lo stato calcolato è { cart: { itemCount: 3 } }. Le chiavi event e eventInfo non fanno parte dello stato calcolato, ma gli oggetti evento rimangono nell’array del livello dati come cronologia.
Se la chiave event è mancante, vuota o non è una stringa, ACDL considera l’oggetto come un push di dati. Nessun listener di eventi chiamato e lo stato calcolato non include le chiavi event o eventInfo.
noun verb (cart add, form submit) o object.action (cart.add, form.submit), e utilizzarla ovunque. Poiché i nomi fanno distinzione tra maiuscole e minuscole, i nomi non coerenti sono un motivo comune per cui i listener non vengono eseguiti.Eventi incorporati built-in-events
Oltre all’evento denominato, ACDL attiva due eventi incorporati:
adobeDataLayer:change: attivato quando un push cambia lo stato calcolato. Push di dati e push di eventi che trasportano dati lo attivano.adobeDataLayer:event: attivato per ogni push evento, indipendentemente dal nome.
La tabella seguente mostra gli eventi che attivano ogni tipo di push:
adobeDataLayer:eventadobeDataLayer:change{ page: { title: "Home" } }{ event: "click" }eventInfo, ad esempio { event: "click", eventInfo: {...} }{ event: "cart add", cart: {...} }Quando un push attiva più di un evento, ACDL chiama i listener nell’ordine seguente: adobeDataLayer:event, quindi adobeDataLayer:change, infine l’evento denominato.
Cosa ricevono i listener listener-arguments
ACDL chiama ogni listener con un argomento: una copia dell’oggetto completo inviato, inclusi event, eventInfo ed eventuali dati.
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 }
});
});
I seguenti dettagli si applicano a ogni listener:
- Lo stato calcolato è già aggiornato. Quando viene eseguito un listener, lo stato calcolato include già i dati del push che lo ha attivato.
- L’argomento è una copia. La sua modifica non modifica il livello dati o l’oggetto inviato.
thisè il livello dati. In una funzione listener,thisfa riferimento all’arrayadobeDataLayer.- I listener vengono eseguiti in modo sincrono. ACDL chiama ogni listener prima che
push()restituisca. Mantieni gli ascoltatori corti e non lavorarci lentamente.
Ascolta eventi passati e futuri scope
Per impostazione predefinita, un nuovo listener viene eseguito per gli eventi corrispondenti già presenti nell’array del livello dati e per gli eventi corrispondenti inviati in un secondo momento. Questo comportamento significa che uno script può aggiungere il proprio listener in qualsiasi momento senza che si verifichino eventi mancanti precedenti, ad esempio una visualizzazione di pagina inviata prima del caricamento della libreria di tag.
È possibile modificare questo comportamento con l’opzione scope per ascoltare solo gli eventi passati o solo quelli futuri. Per informazioni sul modo in cui ACDL mantiene gli eventi passati, vedere Coda e cronologia.
Evitare cicli continui loops
Un listener può inviare messaggi push al livello dati. Processi ACDL che eseguono il push immediatamente, prima della restituzione del listener. Se un listener invia un messaggio che attiva nuovamente lo stesso listener, le chiamate non terminano mai finché il browser non genera un errore di overflow dello stack, ad esempio RangeError: Maximum call stack size exceeded. Ad esempio, un listener adobeDataLayer:change che invia i dati si attiva da solo.
Eseguire il push da un listener solo quando il nuovo push non può attivare lo stesso listener.