트러블 슈팅
1. gladsdk.cmd 미사용
NAM SDK의 모든 API는 gladsdk의 명령어 대기열(gladsdk.cmd)에 추가된 함수 내에서 사용되어야 합니다.
window.gladsdk 명령어 대기열 초기화
window.gladsdk = window.gladsdk || { cmd: [] };
NAM SDK API 사용시 window.gladsdk.cmd 배열에 추가되는 콜백 함수에서만 사용
-
잘못된 코드
// window.gladsdk.cmd 배열에 추가되는 콜백 함수 없이 gladsdk API 호출
window.gladsdk.defineAdSlot(adSlotInfo); -
권장 코드
// window.gladsdk.cmd 배열에 추가되는 콜백 함수에서 gladsdk API 호출
window.gladsdk.cmd.push(function () {
window.gladsdk.defineAdSlot(adSlotInfo);
});
2. gladsdk 스코프 체이닝으로 인한 문제
window.gladsdk
를 지역 변수(혹은 멤버 변수)에 할당한 뒤 gladsdk.cmd.push 콜백 함수에서 gladsdk를 재선언하지 않으면 콜백 함수내에서 gladsdk가 초기화되지 않은 기본 객체를 바라볼 수 있습니다.
초기화되지 않은 객체를 바라보면 gladsdk의 API를 사용할 수 없습니다.
-
잘못된 코드
window.gladsdk = window.gladsdk || { cmd: [] };
var gladsdk = window.gladsdk;
gladsdk.cmd.push(function() {
var targetAdSlot = gladsdk.defineAdSlot({ // 초기화 되지 않은 gladsdk를 바라보므로 defineAdSlot가 존재하지 않음!
...
});
}); -
[해결 방법 1] 콜백 함수 내에서 gladsdk를 재선언한다.
window.gladsdk = window.gladsdk || { cmd: [] };
var gladsdk = window.gladsdk;
gladsdk.cmd.push(function() {
var gladsdk = window.gladsdk;
var targetAdSlot = gladsdk.defineAdSlot({
...
});
}); -
[해결 방법 2] 항상
window.gladsdk
를 이용한다.window.gladsdk = window.gladsdk || { cmd: [] };
window.gladsdk.cmd.push(function() {
var targetAdSlot = window.gladsdk.defineAdSlot({
...
});
});