Как использовать Google DFA (тег издателя Google) в SPA? - PullRequest
0 голосов
/ 16 октября 2018

Я использую Google DFA (gpt.js) в Angular.

Первый раз, когда объявление отображается нормально, но во второй раз, когда оно дает нулевую ошибку.

У меня есть директива, которая имеетследующий метод, вызываемый в методе OnInit:

addGoogleAd() {
  const googletag: any = window['googletag'] || {};

  if (window['googletag'] && googletag.apiReady) {
    googletag.cmd = googletag.cmd || [];

    googletag.cmd.push(() => {
      googletag.pubads().setTargeting('site', 'weatherinnovations');
      googletag.pubads().enableSingleRequest();

      googletag.defineSlot('/xx/weather_innovations', [[160, 600]], 'div-gpt-ad-xx-1')
        .setTargeting('position', ['s1']).addService(googletag.pubads());
      googletag.defineSlot('/xx/weather_innovations', [[300, 250]], 'div-gpt-ad-xx-2')
        .setTargeting('position', ['s2']).addService(googletag.pubads());
      googletag.defineSlot('/xx/weather_innovations', [[300, 250]], 'div-gpt-ad-xx-3')
        .setTargeting('position', ['s3']).addService(googletag.pubads());
      googletag.defineSlot('/76643716/weather_innovations', [[728, 90]], 'div-gpt-ad-xx-4')
        .setTargeting('position', ['s4']).addService(googletag.pubads());
      googletag.defineSlot('/xx/weather_innovations', [[728, 90]], 'div-gpt-ad-xx-5')
        .setTargeting('position', ['s5']).addService(googletag.pubads());

      googletag.pubads().collapseEmptyDivs(true, true);
      googletag.enableServices();
    });
    googletag.display(this.id);
  }
}

Панель инструментов загружает и отображает рекламу, но при возврате из другого компонента выдает следующую ошибку:

pubads_impl_265.js: 1 Исключение в команде GPT в очереди TypeError: Невозможно прочитать свойство 'setTargeting' со значением null

Я утешил googletag и не является пустым, и имеет такое же содержимое.

1 Ответ

0 голосов
/ 16 октября 2018

Ошибка не была описательной для быстрой отладки.Теперь я уничтожаю ранее созданные слоты, прежде чем создавать больше, и это решило проблему.Используйте строку прямо перед googletag.cmd.push

googletag.destroySlots();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...