0

我在我的页面标题和 JavaScript 中定义了我所有的 adSlot,我想根据它们在页面上的位置刷新“一些”这些 adSlot。

这是我目前所拥有的:

googletag.cmd.push(function() {
  slot1 = googletag.defineSlot('/1234/example', [[728, 90], 'gpt-divId1')
    .addService(googletag.pubads());
  slot2 = googletag.defineSlot('/1234/example', [[300, 250], 'gpt-divId2')
    .addService(googletag.pubads());
  slot3 = googletag.defineSlot('/1234/example', [[300, 250], 'gpt-divId3')
    .addService(googletag.pubads());
googletag.pubads().enableSingleRequest();
googletag.pubads().collapseEmptyDivs();
googletag.enableServices();

然后,我将该定义的插槽的名称放入data-gpt-slot每个 div 的属性中,例如:<div attr="slot1" id="gpt-divId1">.

在一个单独的 JavaScript 中,我试图运行我的 DOM,获取data-gpt-slot某个区域内所有值的列表并将它们添加到googletag.pubads().refresh();

如果我手动调用googletag.pubads().refresh([slot1,slot2]),这些广告会刷新,但如果我尝试通过 jQuery 构建该字符串,它就不会播放。

  var gptdivs = [];
  $('.myContainer .gpt-holder').each(function(){
    gptdivs.push($(this).attr('data-gpt-slot'));
  });
  googletag.pubads().refresh([gptdivs]);

我怀疑我遗漏了一些关于$(this).attr('data-gpt-slot')and slot1,slot2等的属性?

4

2 回答 2

2

问题是您尝试错误地使用刷新方法。它将实际的广告单元实例作为参数,而不仅仅是将其名称作为字符串。

试试这个:

var adunits = {};

adunits['slot1'] = googletag.defineSlot('/1234/example', [[728, 90], 'gpt-divId1').addService(googletag.pubads());
adunits['slot2'] = googletag.defineSlot('/1234/example', [[300, 250], 'gpt-divId2').addService(googletag.pubads());
adunits['slot3'] = googletag.defineSlot('/1234/example', [[300, 250], 'gpt-divId3').addService(googletag.pubads());

然后您刷新 adunits 的代码变为:

var gptdivs = [];
$('.myContainer .gpt-holder').each(function(){
    gptdivs.push(adunits[$(this).attr('data-gpt-slot')]);
});
googletag.pubads().refresh(gptdivs);
于 2013-10-12T04:32:19.187 回答
1

我认为你在这里有一个很深的数组,导致你的问题

refresh([gptdivs])

试试看嘛

refresh(gptdivs)
于 2013-10-12T02:23:39.280 回答