Google AdSense广告高度宽度错误、无法自适应的完美解决方案

作者: ʘᴗʘ发布时间:2021-12-09 16:39 浏览量:447 点赞:344 售价:0

问题简介

你的Google AdSense广告是否出现了宽度、高度过大、过小,导致web页面变形、遮盖的问题?下图是coderbbb网站的Google AdSense广告位宽度溢出的截图:

Google AdSense广告高度宽度错误、无法自适应的完美解决方案

可以看到,因为广告位过宽,导致整个界面变形,十分影响用户体验。但当作者去研究Google AdSense的教程文档时,Google曾明确说明该广告位是“自适应”大小的。也就是说我们展示广告的时候,无需为广告指定长宽。那么到底是为什么会出现上面说的这种情况呢?

经过作者的研究发现,Google AdSense广告宽度、高度自适应失败、错误,通常都是因为广告在父级元素加载、渲染完之前,就加载了。导致Google AdSense对所在HTML DOM元素的长宽判断错误,从而导致显示的广告尺寸错误。

解决方案

我们上一篇文章介绍在Vue中使用Google AdSense广告时(vue页面中添加Google AdSense的正确方法),曾提到过Google AdSense广告位的渲染是通过这行代码(adsbygoogle = window.adsbygoogle || []).push({});来运行的。所以如果你的网站页面出现了Google AdSense广告宽度、高度设置错误的问题时,通常都是因为这行代码过早的运行有关。所以解决方案也很简单,只要控制上面这行代码在HTML页面加载完成之后再执行即可。

作者是通过window.onload=function(){}来控制Google AdSense广告加载时机的,完美解决了广告位宽度、高度自适应失败的问题。如下图所示:

Google AdSense广告高度宽度错误、无法自适应的完美解决方案

代码演示

因为本站有多个广告位,所以在每个广告位修改加载代码会比较麻烦,于是作者在每个广告位<ins>标签外部包了一层div标签,class名为gads。然后编写了如下JS代码,在需要引入Google AdSense广告的地方执行。代码如下:

window['addAds'] = function(){
    window.onload=function(){
        let childList = document.getElementsByClassName('gads');
        for (let i = 0; i < childList.length; i++) {
            let insNode = childList[i].firstChild;
            insNode.style.maxWidth = childList[i].clientWidth||childList[i].offsetWidth;
            (adsbygoogle = window.adsbygoogle || []).push({});
        }
    }
}

上面的代码做了双重保险,一方面通过window.onload来控制Google AdSense必须在页面加载完成后,才能开始加载。另外,通过js设置Google AdSense的广告位最大宽度为父级div标签的宽度。

版权声明:《Google AdSense广告高度宽度错误、无法自适应的完美解决方案》为CoderBBB作者「ʘᴗʘ」的原创文章,转载请附上原文出处链接及本声明。

原文链接:https://www.coderbbb.com/articles/52

其它推荐:

  • 【手把手教你】win10 java jdk8、JDK11下载安装配置环境变量新手教程

    本文详细介绍了如何快速安装配置Oracle JDK8、Oracle JDK11到win10系统中,文章提供了各个常见版本的JDK下载地址(均为Oracle官方下载地址),并介绍了环境变量的配置、测试方法。

  • Netty使用阿里云SSL证书配置SSL

    本文介绍了如何使用阿里云购买的SSL证书来配置Netty,使Netty支持SSL加密的TCP连接。由于直接从阿里云下载的证书文件无法使用,还需要通过OpenSSL做一些格式转换。转换好的pem和key文件,加载到netty的handler中即可完成netty的ssl升级

  • 【终极方案】java通过Selenium调用chrome实现html转图片

    本文介绍了HTML转图片的常用技术和方案,并提出了各个方案的缺点。最后给出了基于selenium和chrome的完美解决方案。使用该方案,可以完美的转化各种HTML、CSS、JS,只要chrome能正常展示的,就能正常截图!

  • 【真实数据】日访问量一万PV的网站需要什么配置的服务器?

    日访问量一万PV的网站,需要什么配置的服务器呢?本文以本站的真实数据为例,一步一步分析、推算了大概需要的服务器配置。

  • Java Springboot使用OkHttp实现微信支付API-V3签名、证书的管理和使用

    新版的微信支付API-V3中,最让人头疼的就是各种安全措施。各种凌乱的概念让人摸不着头脑。比如微信平台证书、商户证书、API KEY等等概念。本文从零开始,引导读者一步一步实现了整个微信支付的安全验证,通过本文可以快速完成微信支付的安全开发。

  • Intellij IDE代码行数统计插件Statistic推荐

    本文介绍了一种能够快速统计IntelliJ项目代码行数的插件:Statistic,通过该插件可以快速查看各个项目、目录的代码行数,还能具体查看项目中不同代码语言的具体行数,十分方便。

  • springboot打印error报错信息到钉钉群

    本文介绍了一种全新的springboot日志打印形式。通过一些配置,可以直接将springboot项目的报错打印到钉钉群,加大减轻了运维人员工作量,并能够及时的获取到服务器的错误信息,更快修正。

  • springboot使用redis限制并发请求、限流

    日常开发中经常会遇到需要限流、限制并发的需求,网上有很多算法、框架的介绍,但通常比较复杂,对于小项目来讲过于复杂。本文介绍了一种通过redis incr函数来实现的简便限流算法,并提供了完整源代码,可以快速的整合到你的项目中,实现API限流。

  • java通过selenium实现网页全屏截图

    本文介绍了如何使用java截图网页,通过本文介绍的方案可以实现全屏截图网页。该方案使用的是java+selenium+chrome的技术。

  • 【就缺个程序员系列】创业公司技术科普

    【就缺个程序员系列】是IT行业多年工作经验的总结,使用大白话给非技术出身的你一些踏踏实实的干货。如果你正在创业,请阅读它!

user

ʘᴗʘ

77
文章数
73427
浏览量
57351
获赞数
67.80
总收入