0

对于单页应用程序,我想知道是否可以请求新广告以替换 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

我的目标是为常见的模板页面提供一个通用的广告容器元素,并为每个分类不同的 pageTransition 请求一个新的广告。

到目前为止我所做的当前测试,尝试只更改 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>
4

2 回答 2

0

这可能对将来的其他人有用。不确定这是否是最好的方法,但它有效。

我正在使用 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>
于 2017-07-07T12:40:42.627 回答
0

有专门的方法来重新加载/刷新没有整个页面的广告,很好地与 SPA 应用程序一起使用

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

您可以将它包装到函数中并调用它,例如之前:

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

请记住如果使用谷歌有条款的刷新功能。见条款

重要提示:要遵守 Google 政策并使您的广告资源能够在 Ad Exchange 上竞争,您必须声明广告资源的哪些部分会刷新。

于 2021-01-25T09:39:33.023 回答