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>

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

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>

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

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

        }
    }
}

Дополнительная информация:

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

Другие вопросы по тегам