【问题标题】:DoubleClick For Publishers (DFP) : Serving expandable ads using asynchronous GPTDFP 广告管理系统 (DFP):使用异步 GPT 投放展开式广告
【发布时间】:2015-09-06 00:19:50
【问题描述】:

我正在使用异步 GPT 来投放展开式广告,但由于异步代码似乎不是友好的 iframe,因此广告素材被截断。

我使用 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>

请问有人可以帮我吗?

【问题讨论】:

    标签: iframe asynchronous google-dfp rich-media


    【解决方案1】:

    您需要使用 iframe buster

    你可以试试下面的代码。请记住,您需要取消选中广告素材设置中的“投放到 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);
    
            }
        }
    }
    

    更多信息:

    更多帮助:

    【讨论】:

    • 很遗憾,没有适用于 GPT 标签的 iFrame Buster(仅适用于 DART 标签)。
    【解决方案2】:

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

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

    如果不止一个元素实际上在固定您的广告素材的尺寸,您可能需要多次调用此调整大小脚本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-30
      • 2016-01-28
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      • 2017-02-21
      相关资源
      最近更新 更多