Повторная загрузка объявления в том же элементе div

Для одностраничных приложений я хотел бы знать, можно ли запросить новое объявление, чтобы заменить существующее объявление в контейнере div

var slotName = '/blogs/peter/recentPosts' // this changes according to route
var adContainer = 'div-common-container' // this never changes
window.googletag.defineSlot(slotName), ['fluid'], adContainer).addService(this.googletag.pubads())

Пример, который я нашел до сих пор, подтверждает, что можно обновить существующие slots, но мой вариант использования отличается ( https://support.google.com/dfp_premium/answer/2694377?hl=en&ref_topic=4390040)

Моя цель состоит в том, чтобы иметь общий элемент контейнера рекламы для общих страниц шаблона, и для каждого перехода страницы, где таксономия различна, запросить новое объявление.

Текущие тесты, которые я провел до сих пор, попробуйте просто изменить slotName, а затем вызвать refresh(), но, похоже, это не работает! Например (было намного сложнее, чем в следующем примере, но только для того, чтобы раскрыть смысл):

<!DOCTYPE html>
<html>
<head>
  <script async='async' src='https://www.googletagservices.com/tag/js/gpt.js'></script>
  <script>
    var myAddSlot
    var googletag = googletag || {};
    googletag.cmd = googletag.cmd || [];
  </script>

  <script>
    googletag.cmd.push(function() {
      myAddSlot = googletag.defineSlot('/6355419/Travel/Europe/France/Paris', ['fluid'], 'div-common-ad-container')
                  .addService(googletag.pubads());
      googletag.enableServices();
    });
  </script>
</head>
<body>
  <div id='div-common-ad-container' />
  <button id="refresh">refresh</button>
  <script>
  googletag.cmd.push(function() { googletag.display('div-common-ad-container'); });
  document.querySelector('#refresh').addEventListener('click', function () {
    googletag.destroySlots()
    googletag.cmd.push(function() {
      myAddSlot = googletag.defineSlot('/6355419/Travel', ['fluid'], 'div-common-ad-container')
                  .addService(googletag.pubads());
      googletag.enableServices();
    });
  })
  </script>
</body>
</html>

Любая подсказка приветствуется!

2 ответа

Это может быть полезно для кого-то еще в будущем. Не уверен, что это лучший подход, но он работает.

Я уничтожаю слот методом, предоставленным gpt, а также очищаю элемент контейнера и атрибут data-google-query-id!

<!DOCTYPE html>
<html>
<head>
  <script async='async' src='https://www.googletagservices.com/tag/js/gpt.js'></script>
  <script>
    var myAddSlot
    var googletag = googletag || {};
    googletag.cmd = googletag.cmd || [];
  </script>

  <script>
    googletag.cmd.push(function() {
      myAddSlot = googletag.defineSlot('/6355419/Travel/Europe/France/Paris', ['fluid'], 'div-common-ad-container')
                  .addService(googletag.pubads());
      googletag.enableServices();
    });
  </script>
</head>
<body>
  <div id='div-common-ad-container'></div>
  <button id="refresh">refresh</button>
  <script>
  googletag.cmd.push(function() { googletag.display('div-common-ad-container'); });
  document.querySelector('#refresh').addEventListener('click', function () {
    googletag.destroySlots()
    document.querySelector('#div-common-ad-container').setAttribute('data-google-query-id', '')
    document.querySelector('#div-common-ad-container').innerHTML = ''
    googletag.cmd.push(function() {
      myAddSlot = googletag.defineSlot('/6355419/Travel/Europe', ['fluid'], 'div-common-ad-container')
                  .addService(googletag.pubads());
      googletag.enableServices();
      googletag.display('div-common-ad-container');
    });
  })
  </script>
</body>
</html>

Существует специальный метод для перезагрузки/обновления только рекламы без всей страницы, хорошо работающий со SPA-приложениями.

      googletag.cmd.push(function () {
    googletag.pubads().refresh();
});

Вы можете обернуть его в функцию и вызвать, например, раньше:

      googletag.cmd.push(function () {
  googletag.display('advertisement_div_id_tag_name');
})

Пожалуйста, помните, что при использовании функции обновления у Google есть пункт. См. пункт

Важно! Чтобы соответствовать политике Google и разрешить вашему инвентарю конкурировать в Ad Exchange, вы должны указать, какие части вашего инвентаря обновляются.

Другие вопросы по тегам