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:

Chiave
Obbligatorio
Descrizione
event
Sì
Stringa non vuota che assegna un nome all’evento. I nomi degli eventi fanno distinzione tra maiuscole e minuscole: cart add e Cart add sono eventi diversi.
eventInfo
No
Eventuali informazioni aggiuntive su questa occorrenza dell’evento, ad esempio un riferimento al componente su cui il visitatore ha fatto clic. ACDL passa eventInfo ai listener ma non lo memorizza nello stato calcolato.
Qualsiasi altra chiave
No
Dati da unire nello stato calcolato, utilizzando le stesse regole di un push dati.
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.

TIP
Scegliere una convenzione di denominazione per gli eventi, ad esempio 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:

Push
adobeDataLayer:event
adobeDataLayer:change
Evento denominato
Solo dati, ad esempio { page: { title: "Home" } }
No
Sì
No
Solo evento, ad esempio { event: "click" }
Sì
No
Sì
Evento e eventInfo, ad esempio { event: "click", eventInfo: {...} }
Sì
No
Sì
Evento e dati, ad esempio { event: "cart add", cart: {...} }
Sì
Sì
Sì

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, this fa riferimento all’array adobeDataLayer.
  • 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.

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