如何检测投放的广告尺寸

sph*_*oid 8 javascript ads responsive-design google-dfp

我目前正在使用DFP广告管理系统发布商代码向广告提供广告,这些广告很快就会响应.我们有一个特定的广告位,可以提供2个潜在的宽度,728或960,并根据提供的宽度,我想要在导航上方或下方呈现广告.

所以显而易见的第一个问题是,这是否是远程理智,而且是否可能?我怀疑我应该定义两个不同的广告位.

虽然主要问题可能更多是学术问题,但我如何才能检测到已投放广告的尺寸?我怀疑这个解决方案与广告平台无关,因为我基本上检测到节点插入,然后检查容器元素的尺寸.

我一直在尝试DOMNodeInserted javascript事件,但它似乎触发了广告的所有"BUT".除非gpt以不触发此事件的方式插入广告,否则我对此感到困惑.

Ken*_*Ken 12

GPT的更新已经允许以更优雅的方式完成.该活动将告诉您是否返回了广告素材,如果是,则会告知您尺寸以及其他信息.

googletag.pubads().addEventListener('slotRenderEnded', function(event) {
 console.log('Creative with id: ' + event.creativeId +
  ' is rendered to slot of size: ' + event.size[0] + 'x' + event.size[1]);
});
Run Code Online (Sandbox Code Playgroud)

还有event.isEmpty会告诉您是否返回了实际的广告素材.


Mat*_*per 4

我之前做过类似的事情......而我所采用的方法是覆盖内部DFP功能(renderEnded),以便我可以看到广告在屏幕上呈现的位置...

例如,为了获得广告的尺寸,您可以执行以下操作(我只在Chrome中对此进行了测试,但它不应该与完全跨浏览器相距太远):

<html>
<head>
    <title>DFP test</title>

    <script type='text/javascript'>
        var googletag = googletag || {};
        googletag.cmd = googletag.cmd || [];
        (function() {
            var gads = document.createElement('script');
            gads.async = true;
            gads.type = 'text/javascript';
            var useSSL = 'https:' == document.location.protocol;
            gads.src = (useSSL ? 'https:' : 'http:') +
            '//www.googletagservices.com/tag/js/gpt.js';
            var node = document.getElementsByTagName('script')[0];
            node.parentNode.insertBefore(gads, node);
        })();
    </script>


    <script type="text/javascript">
        googletag.cmd.push(function() {
            var slot1 = googletag.defineSlot('/12345678/TEST', [266, 115], 'div-gpt-ad-1340819095858-0').addService(googletag.pubads());

            slot1.oldRenderEnded = slot1.renderEnded;
            slot1.renderEnded = function(){
                window.console.log('width: '+document.getElementById('div-gpt-ad-1340819095858-0').getElementsByTagName('iframe')[0].contentWindow.document.width);
                window.console.log('height: '+document.getElementById('div-gpt-ad-1340819095858-0').getElementsByTagName('iframe')[0].contentWindow.document.height);
                slot1.oldRenderEnded();
            };

            googletag.pubads().enableSingleRequest();
            googletag.enableServices();
        });
    </script>

</head>
<body>

    <div id='div-gpt-ad-1340819095858-0' style='width:266px; height:115px;'>
        <script type='text/javascript'>
            googletag.cmd.push(function() {
                googletag.display('div-gpt-ad-1340819095858-0');
            });
        </script>
    </div>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这可能不是你想要的,但是重写那个功能应该让你到达你需要的地方......如果你有任何问题,请告诉我.

  • @umami我发现它只是通过使用chrome检查器查看googletag名称空间.如果您启动检查员并在控制台中键入googletag,您将看到googletag对象...其中有一些功能,如果您查看slot_manager_instance并深入了解各个广告单元,您会发现很多其他函数...我后来发现的另一个repo挂钩内部dfp记录器,并且可以挂钩到其他dfp函数,你可能会觉得有趣:https://github.com/mcountis/dfp-事件 (2认同)