본문으로 건너뛰기

트러블 슈팅

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({
    ...
    });
    });