2

我在这样的页面中有一个广告和一个链接:

<!DOCTYPE html>
<head profile="http://www.w3.org/1999/xhtml/vocab">
<title>DPT - Asynchronous + Single Rest Architecture</title>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
  <script type='text/javascript'>
    var googletag = googletag || {};
    googletag.cmd = googletag.cmd || [];
    (function() {
    var gads = document.createElement('script');
    gads.async = true;
    gads.type = 'text/javascript';
    var useSSL = 'https:' == document.location.protocol;
    gads.src = (useSSL ? 'https:' : 'http:') +
    '//www.googletagservices.com/tag/js/gpt.js';
    var node = document.getElementsByTagName('script')[0];
    node.parentNode.insertBefore(gads, node);
    })();
  </script>
  <script type='text/javascript'>
    googletag.cmd.push(function() {
    googletag.pubads().enableAsyncRendering();
    googletag.defineSlot('/1001256/Home_Top_Leaderboard_728x90', [728, 90], 'div-gpt-ad-1342320102476-72').addService(googletag.pubads());
    googletag.pubads().enableSingleRequest();
    googletag.enableServices();
    });
</script>
</head>
<body>
    <div id="div-gpt-ad-1342320102476-72" style="width:728px; height:90px;">
      <script type="text/javascript">
        googletag.cmd.push(function() { googletag.display('div-gpt-ad-1342320102476-72'); });
      </script>
    </div>
    <a id="refresh" href="#">Refresh ad</a>
    <script type='text/javascript'>
    (function ($) {
        $('#refresh').click(function() {
         googletag.cmd.push(googletag.pubads().refresh());
        return false;
        });
    })(jQuery);
    </script>
</body>
</html> 

第一次点击链接时,广告会刷新。其他时间什么都没有发生。即使只是在 Firebug 等中调用 refresh() 方法,在第一次之后也无济于事。

以上有什么问题?

4

8 回答 8

4

这是问题的根源

googletag.pubads().enableSingleRequest();

停止使用单请求模式,您可以毫无问题地调用 googletag.pubads().refresh()。没有设法找到任何解释这一点的文件。

于 2015-01-13T23:00:52.507 回答
4

根据https://support.google.com/dfp_premium/answer/4578089,刷新函数采用 adSlots 数组的参数:

googletag.pubads().refresh([gptAdSlots[0], gptAdSlots[1]]);

这会改变你的行为吗?

如果做不到这一点,我建议通过将google_consoleorgoogfc参数添加到您的查询字符串来启用 Google Publisher Console(有关详细信息,请参阅https://support.google.com/dfp_sb/answer/181070?hl=en)并检查错误

于 2014-05-16T15:30:53.590 回答
2

试试看:

googletag.pubads().refresh(null, {changeCorrelator: false});

来自https://developers.google.com/doubleclick-gpt/reference

获取并显示页面上特定或所有广告位的新广告。仅在异步渲染模式下工作。为了在所有浏览器中正常运行,调用 refresh 之前必须调用显示广告位。如果省略对 display 的调用,则刷新可能会出现意外行为。如果需要,可使用 disableInitialLoad 方法来阻止展示广告获取广告。

和:

与此刷新调用关联的配置选项。changeCorrelator 指定是否为获取广告生成新的相关器。我们的广告服务器会短暂地维护这个相关因子值(目前为 30 秒,但可能会发生变化),因此,具有相同相关因子的请求会被视为一次页面浏览。默认情况下,每次刷新都会生成一个新的相关器。

我希望它至少有一点帮助。

于 2017-04-28T08:43:32.230 回答
1

我现在看不到这个问题的任何答案。我在我目前正在工作的站点中遇到了同样的问题,并且幸运地通过添加 $(window).load(function(){ }); 意外地解决了这个问题;在javascript代码中。

于 2013-07-26T06:29:04.787 回答
1

您需要在两个部分中定义插槽:

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

    <script>
      googletag.cmd.push(function() {
        slot1 = googletag.defineSlot('/xxxx/suihgdwiuhdwiu', [728, 90], 'div-gpt-    ad-xxxxxxx-0').
    setTargeting("test", "refresh").
    addService(googletag.pubads());
        googletag.pubads().enableSingleRequest();
        googletag.enableServices();
      });
    </script>

和:

<div id='div-gpt-ad-xxxxxxxxx-0' class="adsbygoogle">
<script>
googletag.cmd.push(function() { googletag.display('div-gpt-ad-xxxxxxxx-0'); });
setInterval(function(){googletag.pubads().refresh([slot1]);}, 60000);
</script>
</div>
</div>
于 2019-01-04T00:37:40.853 回答
0

我认为您的广告单元定义不太正确。

尝试:

<html>
<head>
    <title>DFP test</title>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

    <script type='text/javascript'>
        var googletag = googletag || {};
        googletag.cmd = googletag.cmd || [];
        (function() {
        var gads = document.createElement('script');
        gads.async = true;
        gads.type = 'text/javascript';
         var useSSL = 'https:' == document.location.protocol;
        gads.src = (useSSL ? 'https:' : 'http:') +
        '//www.googletagservices.com/tag/js/gpt.js';
        var node = document.getElementsByTagName('script')[0];
        node.parentNode.insertBefore(gads, node);
        })();
    </script>


    <script type="text/javascript">
        googletag.cmd.push(function() {
        googletag.pubads().enableAsyncRendering();
        googletag.defineSlot('/1234567/Home_Top_Leaderboard_728x90', [728, 90], 'div-gpt-ad-1342320102476-72').addService(googletag.pubads());
        googletag.pubads().enableSingleRequest();
        googletag.enableServices();
        });
    </script>

</head>
<body>

    <div id='div-gpt-ad-1342320102476-72' style='width:728px; height:90px;'>
        <script type='text/javascript'>
                googletag.cmd.push(function() { googletag.display('div-gpt-ad-1342320102476-72'); });
        </script>
    </div>

    <a id="refresh" href="#">Refresh ad</a>

    <script type='text/javascript'>
        (function ($) {
            $('#refresh').click(function() {
                googletag.cmd.push(googletag.pubads().refresh());
                return false;
            });
        })(jQuery);
    </script>

</body>
</html>

显然,要使其正常工作,您需要将 /1234567/Home_Top_Leaderboard_728x90 更改为正确的值。

于 2012-08-29T08:13:15.547 回答
0

如果你想让广告位被刷新也许可以使用这种方法,

<!-- header script -->
<script async='true' src='https://securepubads.g.doubleclick.net/tag/js/gpt.js'></script>
<script>
    var googletag = googletag || {};
    googletag.cmd = googletag.cmd || [];
    var REFRESH_KEY='refresh';
    var REFRESH_VALUE='true';
</script>
<script>
    googletag.cmd.push(function() {
        var slot_bottomframe = googletag.defineSlot('/1001256/Home_Top_Leaderboard_728x90', [728,90], 'div-gpt-ad-1342320102476-72');
        slot_leaderboard.setTargeting('pos',['leaderboard']);
        slot_leaderboard.setTargeting(REFRESH_KEY,REFRESH_VALUE);
        slot_leaderboard.addService(googletag.pubads());
            
        var SECOND = 60;
        googletag.pubads().addEventListener('impressionViewable',function(event) {
            var slot=event.slot;
            if(slot.getTargeting(REFRESH_KEY).indexOf(REFRESH_VALUE)>-1) {
              setTimeout(function() {
                googletag.pubads().refresh([slot]);
              }, SECOND*1000);
            }
        });

        googletag.pubads().enableSingleRequest();
        googletag.pubads().collapseEmptyDivs();
        googletag.enableServices();
});
</script>

于 2020-07-08T04:27:37.147 回答
0

对我来说,解决方案是:googletag.pubads().updateCorrelator(); googletag.pubads().refresh();

于 2016-02-26T19:46:56.923 回答