无限滚动页面上的Google DFP代码

时间:2016-07-16 21:23:36

标签: javascript jquery ajax infinite-scroll google-dfp

我希望使用Google DFP广告管理系统在无限卷轴上通过ajax加载的每个页面中展示广告。我每页有四个不同的插槽。我按照常规Google DFP代码进行操作,在我的情况下:

<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.defineSlot('/XXXXXXX/ROS_DHTML', [600, 600], 'div-gpt-ad-5').addService(googletag.pubads());
googletag.defineSlot('/XXXXXXX/ROS_Horizontal', [960, 250], 'div-gpt-ad-6').addService(googletag.pubads());
googletag.defineSlot('/XXXXXXX/ROS_Interstitial', [1920, 1080], 'div-gpt-ad-7').addService(googletag.pubads());
googletag.defineSlot('/XXXXXXX/ROS_Txt', [[300, 250], [300, 600]], 'div-gpt-ad-8').addService(googletag.pubads());
googletag.pubads().collapseEmptyDivs();
googletag.enableServices();
});
</script>

然后,我再次定期拨打广告。

<div id='div-gpt-ad-8'>
<script type='text/javascript'>
googletag.cmd.push(function() { googletag.display('div-gpt-ad-8'); });
</script>
</div>

我的无限滚动脚本(WordPress的Ajax Load More插件)为我提供了每次成功查询后调度的回调函数。例如,我使用它来添加AddThis,Facebook和Twitter按钮代码。

$(function() {
$.fn.almComplete = function(alm){
console.log("Ajax Load More Complete!");
};
})(jQuery);

如何让DFP广告管理系统和此回调功能协同工作?我知道Advanced Google Publisher Tag,但我不是世界上最狡猾的代码,我根本无法适应我的需求(特别是因为我使用了很多插槽)。所以,我认为这将是更容易的方式......

1 个答案:

答案 0 :(得分:2)

解决问题的关键是为每个插槽使用新的ID(div-gpt-ad-randomNumber),然后将该ID用于要添加横幅的右侧元素。

对于滚动期间的每个“常规”加载,您必须使用新的随机ID再次定义所需的插槽:

function getRandomId() {
    return "ad-" + Date.now();
}

var ad1 = getRandomId(),
    ad2 = getRandomId(),
    ad3 = getRandomId();

googletag.cmd.push(function() {
    googletag.defineSlot('/XXXXXXX/ROS_DHTML', [600, 600], ad1).addService(googletag.pubads());
    googletag.defineSlot('/XXXXXXX/ROS_Horizontal', [960, 250], ad2).addService(googletag.pubads());
    googletag.defineSlot('/XXXXXXX/ROS_Interstitial', [1920, 1080], getRandomId()).addService(googletag.pubads());
    googletag.defineSlot('/XXXXXXX/ROS_Txt', [[300, 250], [300, 600]], ad3).addService(googletag.pubads());
    googletag.pubads().collapseEmptyDivs();
    googletag.enableServices();
});

//You can do a cleaner version with a loop but I think this example it's better to understand the idea
var adContainer = document.createElement("div");
div.id = ad1;
document.body.appendChild(adContainer); // Append it where you need
googletag.cmd.push(function() { googletag.display(ad1);});

//Repeat it for ad2 and ad3

如果还不够,请告诉我,我会用小提琴编辑帖子,并附上真实的例子。