我们在一个页面上有一系列DFP广告,每次用户点击图库浏览器上的每个缩略图图标时,都会使用javascript refresh()调用自动刷新:
googletag.pubads().refresh();
问题是,如果用户快速点击图库,广告会针对每次点击进行刷新,以便最终出现空白广告,因为系统无法跟上用户点击次数。
因此,我只想在广告完全加载时才调用刷新。
有没有办法检测广告位内广告的加载状态?
我们的广告使用以下内容定义:
slot_header_lge = googletag.defineSlot('/XXX/Header-Home-Large', [945, 230], 'div-gpt-ad-Header-Large').addService(googletag.pubads());
googletag.pubads().enableAsyncRendering();
googletag.pubads().collapseEmptyDivs();
googletag.enableServices();
答案 0 :(得分:3)
我制作了jquery plugin包装DFP广告管理系统,有点想出一个解决这个问题的解决方案......在广告单元上有一个名为renderEnded()的内部函数,您可以将其挂钩到检查广告单元的呈现时间。
根据我的经验,这只是意味着HTML代码已放入页面中......并不一定是广告已完全加载。您可以将一些timeOuts与此结合使用,以获得相当强大的系统。
例如,使用我的插件,您可以尝试以下操作,它不应该允许广告在页面上的最后一个广告呈现后的5秒内刷新:
<!DOCTYPE html>
<html>
<head>
<title>TEST</title>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://coop182.github.io/jquery.dfp.js/jquery.dfp.js"></script>
</head>
<body>
Test DFP Ads.
<div class="adunit" id="buyingcars_ATF_728x90" data-dimensions="728x90"></div>
<script>
var adsLoaded = true;
function checkLoading() {
console.log('Checking...');
if (adsLoaded) {
loadAds();
}
}
function loadAds() {
console.log('Loading...');
adsLoaded = false;
$.dfp({
dfpID: '3853655',
afterAllAdsLoaded: function() {
setTimeout(function(){adsLoaded = true;}, 5000);
}
});
}
checkLoading();
</script>
<a href="#" onclick="checkLoading();">Refresh</a>
</body>
</html>