2015-06-19 166 views
1

我正在使用异步GPT来投放我的展开式广告,但广告素材正在被切断,因为看起来异步代码不是友好的iframe。DFP广告管理系统(DFP):使用异步GPT投放展开式广告

我使用DOM函数来转义iframe父级,但我认为我不能,因为该广告素材在呈现页面之前呈现。

这是我的标签样本

<script type='text/javascript' src='http://www.googletagservices.com/tag/js/gpt.js'> 
    googletag.pubads().definePassback('6917646/H24info/H24INFO_ATF_HOME_728x90', [[728,90]]).setClickUrl('[INSERT_CLICK_COUNTER_HERE]').display(); 

    googletag.pubads().enableSingleRequest(); 
    googletag.pubads().addEventListener('slotRenderEnded', function(event) { 

     var sas = document.getElementById("sas_format_33008"); 

     var gpt = document.getElementById("gpt_unit_6917646/H24info/H24INFO_ATF_HOME_728x90_1_ad_container"); 

     gpt.style.position = "absolute"; 
     gpt.style.zIndex = "100"; 

     sas.style.height = "90px"; 
    }); 
    googletag.enableServices(); 
</script> 

有没有人谁可以帮我吗?

回答

1

另一个选择是使用发布消息。但是你需要在你的主站点中放置一个事件监听器。 事情是这样的:

<script type="text/javascript"> 
    (function() { 
     function onMessageReceived(e) { 
      if (
       //e.origin !== 'http://tpc.googlesyndication.com' || 
       typeof e.data !== 'object' || 
       typeof e.data.id !== 'string' || 
       e.data.cmd !== 'setStyle' || 
       typeof e.data.params !== 'object' 
      ) { 
       return; 
      } 

      var frame = document.getElementById(e.data.id); 

      if (frame === null) { 
       return; 
      } 

      Object.keys(e.data.params).forEach(function(param) { 
       frame.style[param] = e.data.params[param]; 
      }); 
     } 

     if (window.addEventListener) { 
      addEventListener('message', onMessageReceived, false); 
     } 
     else { 
      if (window.attachEvent) { 
       attachEvent('onmessage', onMessageReceived); 
      } 
      else { 
       window.onmessage = onMessageReceived; 
      } 
     } 
    })(); 
</script> 

然后在广告素材代码,你将不得不调用事件侦听器来调整,你需要扩展的元素。例如:

<script> 
(function(){ 
    if (window.top.postMessage) { 
     window.top.postMessage({ 
      cmd: 'setStyle', 
      id: 'div-of-the-banner', 
      params: { 
       display: 'block', 
       height: '600px', 
       width: '300px' 
      } 
     }, '*'); 
    } 
})(); 
</script> 

您可能需要调用这个调整大小脚本几次,如果超过一个元素实际上是修理你的广告的尺寸。

1

您将需要使用iframe解码器

您可以尝试下面的代码。请记住,您需要在广告素材设置中取消选中“投放到SafeFrame”配置。广告素材的类型必须是自定义,第三方或模板)

if (top === self) { 
     // 
} else { 
    var parentIframes = top.document.querySelectorAll('iframe'); 
    for (var i=0; i < parentIframes.length; i++) { 
     var el = parentIframes[i]; 
     if (el.contentWindow === self) { 
      // here you can create an expandable ad 
      var expandableAd; 

      var googleDiv = el.parentNode; 

      googleDiv.insertBefore(expandableAd, el); 

     } 
    } 
} 

的更多信息:

更多的帮助:

+0

不幸的是,GPT标签没有iFrame Buster(仅适用于DART标签)。 –

相关问题