有人可以帮我解决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不是标准数组。
怎么做?感谢。
答案 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),因此您确实无法对其进行修改。
回到你的问题:
如果您使用
googletag.pubads().enableSingleRequest()
https://developers.google.com/doubleclick-gpt/reference#googletag.PubAdsService_enableSingleRequest)您将在第一个googletag.display(...)电话中查询并显示所有广告位。
如果您不使用enableSingleRequest
,则每次针对特定广告位调用googletag.display(…)
时都会发送单个查询,无论其定义顺序如何
考虑到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]);
}
此代码会触发广告调用