Google GPT - googletag.cmd队列重新排序

时间:2016-12-08 14:35:00

标签: google-dfp

有人可以帮我解决Google GPT googletag.cmd队列重新排序问题吗?

(1)在主页HTML页面中,我有这个:

googletag.cmd.push(function() { defineSlot1(); });
googletag.cmd.push(function() { defineSlot2(); });
googletag.cmd.push(function() { defineSlot3(); });
googletag.cmd.push(function() { defineSlot4(); });

(2)在附加的js中,我动态添加:

googletag.cmd.push(function() { defineSlot5(); });

(3)现在,在googletag.cmd队列中,序列如下:

[slot1, slot2, slot3, slot4, slot5];

我的问题是,如何将 slot5 移到 slot1 之后的第二位,如下所示:

[slot1, slot5, slot2, slot3, slot4];

https://developers.google.com/doubleclick-gpt/reference中, googletag.commandArray只有push(f)方法,而googletag.cmd不是标准数组。

怎么做?感谢。

1 个答案:

答案 0 :(得分:0)

Google GPT库以异步模式加载,最初将googletag.cmd定义为常规数组。

<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>

当下载主库(它与页面呈现并行发生)时,它会将最初定义的数组转换为自定义对象(https://developers.google.com/doubleclick-gpt/reference#googletag.CommandArray),因此您确实无法对其进行修改。

回到你的问题:

  1. 如果您使用 googletag.pubads().enableSingleRequest() https://developers.google.com/doubleclick-gpt/reference#googletag.PubAdsService_enableSingleRequest)您将在第一个googletag.display(...)电话中查询并显示所有广告位。

  2. 如果您不使用enableSingleRequest,则每次针对特定广告位调用googletag.display(…)时都会发送单个查询,无论其定义顺序如何

  3. 考虑到p.1和p.2我不明白为什么你会关心插槽定义的顺序。 无论如何,如果你真的需要它,你可以定义自己的队列变量

    window.custom_cmd = [];
    

    并在整个网页中使用它代替googletag.cmd,因此它看起来如下:

    custom_cmd.push(function() {
    // regular defineSlot(…) calls
    });
    

    然后在你加载的js文件加载后的某个地方

    // reorder it or whatever else
    …
    // copy your queue into the regular queue
    for (var i = 0; i < custom_cmd.length; i++) {
        googletag.cmd.push(custom_cmd[i]);
    }
    

    此代码会触发广告调用