【问题标题】:Google DFP tags on infinite scroll page无限滚动页面上的 Google DFP 代码
【发布时间】:2016-07-16 21:23:35
【问题描述】:

我想使用 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,但我不是世界上最精通代码的人,我只是无法适应我的需要(特别是因为我使用了很多插槽)。所以,我认为这将是更简单的方法......

【问题讨论】:

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


    【解决方案1】:

    解决问题的关键是为每个插槽使用一个新的 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
    

    如果还不够,请告诉我,我将使用 Fiddle 编辑帖子并提供实际示例。

    【讨论】:

    • 我只是没有得到第二部分。你能摆弄它吗? :)
    • 这是一个带有示例的小提琴:FiddleJS 这是一个简单的示例,每次单击时都会加载一个新横幅。如果您需要对代码进行任何解释,请告诉我。 P.S.:对于 Fiddle 上的内联 JS 感到抱歉。我试图将所有内容都放在 JS 部分,但它不起作用。希望它对您仍然有用。
    猜你喜欢
    • 2021-02-09
    • 2015-01-21
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多