Iframe 이벤트 전달
1. <iframe\>
내 이벤트의 이해
대부분의 광고는 <iframe\>
내의 윈도우에서 그려지며 일반적으로 <iframe\>
내에서 발생하는 이벤트는 <iframe\>
의 윈도우 내에서 처리되기 때문에 서비스 페이지 윈도우에 이벤트가 전달되지 않습니다.
이로 인해 이벤트를 사용하는 로직의 동작이 불완전해지며 광고 영역과 서비스 영역의 사용자 경험이 달라지는 문제가 생길 수 있습니다.
이와 같은 이슈를 해결하기 위해 SDK는 <iframe\>
의 이벤트를 서비스 영역의 윈도우로 전달할 수 있는 기능을 제공합니다.
2. <iframe\>
이벤트 전달 활성화 조건
2-1. Safeframe 미설정 혹은 해제
SafeFrame 설정을 하지않거나 해제하여야합니다. 이벤트 전달은 <iframe\>
내부에서 부모 DOM에 직접 접근하여 dispatchEvent
를 통해 이루어집니다. SafeFrame과 같은 크로스 도메인 환경에서는 부모 DOM에 직접 접근이 불가능하기 때문에 이벤트 전달이 불가합니다.
2-1. 이벤트 전달 전역 설정
광고를 노출하기 전에 아래와 같이 <iframe\>
이벤트 전달을 할성화하는 전역 파리미터가 설정되어야 합니다.
touch, mouse, wheel, keyboard 4개의 속성을 설정할 수 있으며 개별 속성의 기본값은 false 입니다.
각 속성별 지원 이벤트는 3. 지원 가능한 이벤트에서 확인할 수 있습니다.
gladsdk.setGlobalConfig({
activateIframeEvent: {
touch: false,
mouse: false,
wheel: false,
keyboard: false,
},
});
이벤트 전달 설정은 광고 슬롯 별 설정이 아닌 페이지 전역 설정입니다.
3. 지원 가능한 이벤트
3-1. touch
touchstart
, touchmove
, touchend
, touchcancel
이벤트를 지원합니다.
touch 이벤트의 pageX
, pageY
, clientX
, clientY
좌표값은 보정 되어 실제 서비스 영역에서 발생된 것처럼 변환됩니다.
3-2. mouse
mousedown
, mousemove
, mouseup
, mouseleave
이벤트를 지원합니다.
mouse 이벤트의 clientX
, clientY
좌표값은 보정 되어 실제 서비스 영역에서 발생된 것처럼 변환됩니다.
3-3. wheel
wheel
이벤트를 지원합니다.
3-4. keyboard
keydown
이벤트를 지원합니다.
4. 이벤트 전달받기
이벤트 전달 설정을 통해 <iframe\>
내부 윈도우로부터 전달받은 이벤트는 <iframe\>
요소에서 발화 됩니다.
이벤트 위임을 통해 상위 요소에서도 이벤트를 수신할 수 있습니다.
<body>
<div id="adContainer"></div>
</body>
<script>
window.gladsdk.setGlobalConfig({
activateIframeEvent: {
touch: true,
mouse: true,
wheel: true,
keyboard: true,
},
});
f;
var adContainer = document.getElementById('adContainer');
adContainer.addEventListener('touchstart', function (e) {
// touchstart 이벤트 처리
});
adContainer.addEventListener('mousedown', function (e) {
// mousedown 이벤트 처리
});
adContainer.addEventListener('wheel', function (e) {
// wheel 이벤트 처리
});
adContainer.addEventListener('keydown', function (e) {
// keyup 이벤트 처리
});
</script>