当谷歌广告没有显示时,如何以编程方式折叠空div中的空格

时间:2018-04-05 16:45:50

标签: adsense adsense-api

有没有办法以编程方式折叠在Google广告未显示时产生的空白区域?如果是这样,我很乐意看到相同的说明性例子。

四处搜索让我this official Google resource完成了我的要求。但是,这与Doubleclick for Publishers有关,不幸的是,它是一个单独的产品。我很想知道如何为AdSense处理这个问题 - 我的一些用户此刻正盯着空地。

如果重要,请参阅Google AdSense提供的示例广告代码段(我已将其置于中心位置):

    <div style="text-align:center">
        <ins class="adsbygoogle"
             style="display:block"
             data-ad-client="ca-pub-0000000000000000"
             data-ad-slot="0044031319"
             data-ad-format="auto"></ins>
        <script>
        (adsbygoogle = window.adsbygoogle || []).push({});
        </script>
    </div>

6 个答案:

答案 0 :(得分:3)

我知道这很老了,但是由于我现在一直在处理。在jQuery中执行此操作的一种足够简单的方法是检查类adsbygoogle中没有子元素的所有元素。

这将选择该类中的所有元素并将其隐藏,从而有效地折叠它们。

$(".adsbygoogle:empty").hide();

您也可以用它做很多其他的事情,例如如果它在div中并且您也需要隐藏它,请使用$(".adsbygoogle:empty").parent().hide()将其进一步折叠。

我确信可以使用香草javascript轻松完成此操作。我建议在DOM加载后运行这一行代码,甚至要等10秒才能看到google是否填充了广告。

答案 1 :(得分:2)

我注意到AdSense代码广播了一个MessageEvent,因此当我收到一个resize-me键/值对的'r_nh': 0类型的事件时,我隐藏了AdSense容器(CSS类adsense-ad )。

如果您在同一页面上有多个AdSense容器,则可以尝试从同一封邮件中解析qid键。

window.addEventListener("message", (event)=>{
    try {
        let message = JSON.parse(event.data);
        if (message.msg_type == 'resize-me') {
            let shouldCollapseAd = false;

            for (let index in message.key_value) {
                let key = message.key_value[index].key;
                let value = message.key_value[index].value;

                if (key == 'r_nh' && value == '0') {
                    shouldCollapseAd = true;
                }
            }

            if (shouldCollapseAd) {
                $('.adsense-ad').hide();
            }
        }
    } catch (e) {

    }
});

答案 2 :(得分:2)

不过现在很简单了,插入这个CSS就行了;

<style>
ins[data-ad-status=unfilled] {display:none!important}
</style>

答案 3 :(得分:1)

此时引用DFP广告管理系统专业版的link provided重定向到documentation for Google Ad Manager,因此此功能可能在没有DFP专业版的情况下可用。


除此之外...
通常,根据我的经验,只要存在一个iframe元素就足以知道广告是否放置在了您希望放置的位置。

setTimeout(function () {
    if (!document.querySelector('#adcontainer').querySelectorAll('iframe').length > 0) {
        document.querySelector('#adcontainer').remove();
    }
},1000*2);

答案 4 :(得分:0)

我试图用CSS解决此问题,因为Adsense会注入具有各种属性的各种iframe,ins和div。

此代码将折叠空格,但是当您在文本中投放广告时,它将溢出部分文本,因此内联需要修改:

<style>
    iframe { height: auto !important}
    ins { height: auto !important}
    #google_ads_frame1 { height: auto !important}
    .adsbygoogle, #aswift_0_expand, #aswift_0_anchor { height: auto!important} /* there might be more of those */
</style>

答案 5 :(得分:-2)

默认情况下,如果广告单元没有要在现场显示的广告资源,Adsense会折叠广告单元。但是,在某些情况下,Adsense会显示空白代替广告。

要解决此问题,您可以在创建或修改广告单元时提供后备广告网址。以下是: https://support.google.com/adsense/answer/113262?hl=en