이벤트

이벤트는 페이지 보기, 클릭 또는 양식 제출과 같이 페이지에서 발생한 일을 다른 스크립트에 알려줍니다. event 키를 사용하여 이벤트를 개체로 Adobe 클라이언트 데이터 레이어(ACDL)에 푸시합니다. 해당 이벤트 이름에 대해 이벤트 수신기를 등록한 스크립트를 호출합니다.

이벤트 오브젝트 event-objects

이벤트 개체에는 다음 키가 있습니다.

키
필수
설명
event
예
이벤트 이름을 지정하는 비어 있지 않은 문자열입니다. 이벤트 이름은 대/소문자를 구분합니다. cart add과(와) Cart add은(는) 다른 이벤트입니다.
eventInfo
아니오
방문자가 클릭한 구성 요소에 대한 참조와 같이 이 이벤트 발생에 대한 추가 정보입니다. ACDL은 eventInfo을(를) 리스너에 전달하지만 계산된 상태에는 저장하지 않습니다.
다른 키
아니오
데이터 푸시와 동일한 규칙을 사용하여 계산된 상태로 병합할 데이터입니다.
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 }
});

이러한 푸시 후 계산된 상태는 { cart: { itemCount: 3 } }입니다. event 및 eventInfo 키는 계산된 상태에 속하지 않지만 이벤트 개체는 데이터 레이어 배열에서 history(으)로 유지됩니다.

event 키가 없거나 비어 있거나 문자열이 아닌 경우 ACDL은 개체를 데이터 푸시로 처리합니다. 호출된 이벤트 리스너가 없으며 계산된 상태에는 event 또는 eventInfo 키가 포함되지 않습니다.

TIP
noun verb(cart add, form submit) 또는 object.action(cart.add, form.submit)과 같은 이벤트에 대한 명명 규칙을 선택하고 모든 곳에서 사용하십시오. 이름은 대/소문자를 구분하므로 일관되지 않은 이름은 리스너가 실행되지 않는 일반적인 이유입니다.

기본 제공 이벤트 built-in-events

명명된 이벤트 외에도 ACDL은 두 개의 기본 제공 이벤트를 트리거합니다.

  • adobeDataLayer:change: 푸시가 계산된 상태를 변경할 때 트리거됩니다. 데이터를 전달하는 데이터 푸시 및 이벤트 푸시가 데이터를 트리거합니다.
  • adobeDataLayer:event: 이름이 무엇이든 모든 이벤트 푸시에 대해 트리거됩니다.

다음 표는 각 유형의 푸시 트리거에 대한 이벤트를 보여 줍니다.

푸시
adobeDataLayer:event
adobeDataLayer:change
명명된 이벤트
{ page: { title: "Home" } }과(와) 같은 데이터만
아니오
예
아니오
{ event: "click" }과(와) 같은 이벤트만
예
아니오
예
이벤트 및 eventInfo(예: { event: "click", eventInfo: {...} })
예
아니오
예
이벤트 및 데이터(예: { event: "cart add", cart: {...} })
예
예
예

한 번의 푸시가 두 개 이상의 이벤트를 트리거하면 ACDL이 리스너를 adobeDataLayer:event, adobeDataLayer:change, 명명된 이벤트의 순서로 호출합니다.

리스너가 받는 항목 listener-arguments

ACDL은 event, eventInfo 및 모든 데이터를 포함하여 푸시된 전체 개체의 사본이라는 하나의 인수를 사용하여 각 수신기를 호출합니다.

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 }
  });
});

다음 세부 사항은 모든 리스너에 적용됩니다.

  • 계산된 상태가 이미 업데이트되었습니다. 리스너가 실행될 때 계산된 상태에는 리스너를 트리거한 푸시의 데이터가 이미 포함됩니다.
  • 인수가 복사본입니다. 변경해도 데이터 레이어나 푸시된 개체는 변경되지 않습니다.
  • this이(가) 데이터 레이어입니다. 수신기 함수 내에서 this은(는) adobeDataLayer 배열을 참조합니다.
  • 리스너가 동기적으로 실행됩니다. ACDL은 push()이(가) 반환되기 전에 각 수신기를 호출합니다. 청취자를 짧게 하고, 청취자 중에서 느린 작업을 하지 마세요.

과거 및 미래 이벤트 듣기 scope

기본적으로 새 리스너는 이미 데이터 레이어 배열에 있는 일치 이벤트와 나중에 푸시되는 일치 이벤트에 대해 실행됩니다. 이 동작은 태그 라이브러리가 로드되기 전에 푸시된 페이지 보기와 같이, 이전에 발생한 이벤트 누락 없이 스크립트가 언제든지 해당 리스너를 추가할 수 있음을 의미합니다.

scope 옵션을 사용하여 이전 이벤트만 듣거나 이후 이벤트만 듣도록 이 동작을 변경할 수 있습니다. ACDL이 이전 이벤트를 유지하는 방법은 큐 및 기록을 참조하세요.

무한 루프 방지 loops

리스너는 데이터 레이어로 푸시할 수 있습니다. 리스너가 반환되기 전에 즉시 푸시되는 ACDL 프로세스입니다. 리스너가 동일한 리스너를 트리거하는 항목을 다시 푸시하면 브라우저에서 스택 오버플로 오류(예: RangeError: Maximum call stack size exceeded)가 발생할 때까지 호출이 끝나지 않습니다. 예를 들어 데이터를 푸시하는 adobeDataLayer:change 리스너는 자체 트리거를 수행합니다.

새 푸시가 동일한 리스너를 트리거할 수 없는 경우에만 리스너에서 푸시를 수행합니다.

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