我在页面中有广告和链接:
<!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()方法也不会在第一次之后执行任何操作。
以上是什么问题?
答案 0 :(得分:3)
根据https://support.google.com/dfp_premium/answer/4578089,刷新函数采用adSlots数组的参数:
googletag.pubads().refresh([gptAdSlots[0], gptAdSlots[1]]);
这会改变你的行为吗?
如果不这样做,我建议您通过在查询字符串中添加google_console
或googfc
参数来启用Google发布商控制台(有关详细信息,请参阅https://support.google.com/dfp_sb/answer/181070?hl=en),并检查错误
答案 1 :(得分:1)
我现在看不到任何问题的答案。我在我目前工作的网站遇到了同样的问题,幸运的是通过添加$(window).load(function(){})意外地解决了这个问题。在javascript代码中。
答案 2 :(得分:1)
这是问题的根源
googletag.pubads().enableSingleRequest();
停止使用singlerequest模式,您可以毫无问题地调用googletag.pubads()。refresh()。找不到任何解释此文件的文件。
答案 3 :(得分:1)
试一试:
googletag.pubads().refresh(null, {changeCorrelator: false});
来自https://developers.google.com/doubleclick-gpt/reference:
获取并显示网页上特定或所有广告位的新广告。仅适用于异步呈现模式。 为了在所有浏览器中保持正确的行为,必须在调用刷新之前显示广告位。如果省略对显示的调用,则刷新可能会出现意外行为。如果需要,可以使用disableInitialLoad方法停止显示以获取广告。
和
与此刷新调用关联的配置选项。 changeCorrelator指定是否要为获取广告生成新的相关因子。我们的广告服务器会短暂维护此相关因子值(目前持续30秒,但可能会发生变化),以便将具有相同相关器的请求靠近在一起将被视为单页面视图。默认情况下,每次刷新都会生成一个新的相关器。
我希望它至少有一点帮助。
答案 4 :(得分: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>
答案 5 :(得分: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更改为正确的值。
答案 6 :(得分:0)
对我来说解决方案是: 。googletag.pubads()updateCorrelator(); googletag.pubads()刷新();
答案 7 :(得分: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>