Flexbox 导致 adsense 错误:“adsbygoogle.push() 错误:没有可用宽度 = 0 的插槽大小”

Posted

技术标签:

【中文标题】Flexbox 导致 adsense 错误:“adsbygoogle.push() 错误:没有可用宽度 = 0 的插槽大小”【英文标题】:Flexbox causes adsense error: "adsbygoogle.push() error: No slot size for availableWidth=0" 【发布时间】:2016-08-25 14:56:18 【问题描述】:

我有一个网站,它使用 angular-material 和 flexbox 进行布局。我试图在这些 flexbox 容器之一中包含一个 Google Adsense sn-p,但它给了我错误:“adsbygoogle.push() 错误:availableWidth=0 没有插槽大小”。但是,如果我将相同的 sn-p 放在 flexbox 容器之外,它可以正常运行。

这并不理想,因为我的整个网站都是用 flexbox 制作的。所以我想找到一种方法在 flexbox 容器中完成这项工作。

这是我的代码的 sn-p:

    <div layout="column" layout-align="center center" layout-padding="" flex="flex" class="scroller container">
      <div flex="" hide-xs="" show-gt-xs="">
        <h1>My Account</h1>
      </div>
      <welcome></welcome>
      <script async="" defer="" src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
      <!-- responsive ad-->
      <ins flex="grow" style="width:100%;min-width:100px;height:100px;" data-ad-client="ca-pub-IDISHEREONMYSITE" data-ad-slot="IDISHEREONMYSITE" data-ad-format="auto" class="adsbygoogle"></ins>
      <script>
        document.addEventListener("DOMContentLoaded", function(event) 
            (adsbygoogle = window.adsbygoogle || []).push()
        );
      </script>
    </div>

我还尝试将谷歌广告中对 flex 的所有引用替换为 display:block;我试过使用宽度,没有宽度,最小宽度,最大宽度,所有这些都在一起。我试过把它包裹在一个 div 中,它是一个 flexbox 列,我试过把它放在一个 div 中,它是 display:block;具有固定宽度等。

似乎都不起作用。

有什么想法吗?

有没有办法向 Google 报告这个(可能的)错误?

【问题讨论】:

【参考方案1】:

您需要在 px 而不是 % 中定义您的 width

试试看here,它可能对你有帮助。

【讨论】:

这真的不太理想,这不是违背了自适应广告的全部目的吗? 这是一种解决方法;我已经使用了 max-width 并且它也可以工作【参考方案2】:

我刚遇到这个问题,来寻求帮助。

仅查找有关设置固定宽度的信息(在 PX 中?)。

我知道这不正确,我目前有一个宽度为 90% 的盒子并且工作正常。

让我烦恼的一件事是在更大的显示器上,谷歌广告从不居中。

我尝试将其转换为 flexbox 以对齐内容,这就是我的问题开始的地方。

我通过设置 setTimeOut 和 addclass 解决了这个问题。

    function centerAd() 
     $( "#adBlock" ).addClass( "adBlock" );
    

    var timeoutID;
$(function() 
     timeoutID = window.setTimeout(centerAd, 1000);
)

与班级:

.adBlock display: flex; justify-content:center; align-items:center; align-content:center /* We call this after page has loaded to center ad */

它给了谷歌广告足够的时间来嗅探元素的宽度,然后很好地居中。通常是无缝的。

【讨论】:

【参考方案3】:

Adsense 的响应式代码根据其所在的父元素的宽度确定其插入的 iframe 的宽度。通常这可以正常工作,因为即使父元素还没有内容,它仍然有一个宽度,因为它填充了可用宽度。

但是,如果您的父元素位于根据内容确定其成员宽度的 flexbox 行中,则在添加内容之前,其宽度将为零。因此,除了 Adsense 代码之外,框中没有其他内容,在 Adsense 计算可用宽度时,它为零。

您需要通过将框设置为具有除自动之外的 flex 基础,或将宽度或最小宽度属性应用于框来解决此问题,以便在 Adsense 运行其代码之前的初始状态下,它'会有一个非零宽度。

所以在特定的 flex 成员上,要么设置自动以外的 flex 基础(例如百分比或 px)

flex: 1 0 30%

或者设置一个宽度或最小宽度

min-width: 30%

当唯一的内容是 Adsense 广告时,您不能使用根据内容确定宽度的 flex 基础,因为该广告是随后由 javascript 插入的。

【讨论】:

以上是关于Flexbox 导致 adsense 错误:“adsbygoogle.push() 错误:没有可用宽度 = 0 的插槽大小”的主要内容,如果未能解决你的问题,请参考以下文章

Adsense短码aktivieren

由于 Adsense 导致尝试创建无 cookie 域的问题

如何隐藏空的 AdSense 框

来自 Google Adsense 的 Javascript 错误

使用 Google AdSense 的 400 错误请求

接入谷歌广告错误(主要Adsense)