DoubleClick For Publishers (DFP): показ расширяемых объявлений с использованием асинхронного тега GPT.

Я использую асинхронный 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>

Есть ли кто-нибудь, кто может мне помочь, пожалуйста?


person Youssef Boussafa    schedule 19.06.2015    source источник


Ответы (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>

Возможно, вам придется вызвать этот сценарий изменения размера несколько раз, если на самом деле размер вашего объявления фиксируется более чем одним элементом.

person Ivo    schedule 25.10.2016

Вам нужно будет использовать 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);

        }
    }
}

Больше информации:

Дополнительная помощь:

person felipk    schedule 30.06.2015
comment
К сожалению, нет iFrame Buster для тегов GPT (доступно только для тегов DART). - person Youssef Boussafa; 04.07.2015