在 Vuepress 2 中使用 Google Adsense 并配置自适应加载

迫于服务器续费的压力,最近抽时间和同学一起在社团运营的vuepress中配置了Google Adsense广告,并失陪了微信小程序,令广告只在非小程序环境下加载(由于小程序对域名备案的要求,adsense广告是无法在小程序的webview里面显示,强行显示还会造成小程序直接被「配置业务域名」的弹窗覆盖)。

配置Adsense的自适应加载广告

可参考 https://github.com/SUSTech-CRA/sustech-online-ng/blob/master/docs/.vuepress/public/wx_helper.js#L81-L100

function isInWechatMP() {
    return navigator.userAgent.match(/miniprogram/i) || window.__wxjs_environment === 'miniprogram';
};

function load_adsense() {
    console.log("判断环境,加载 adsense")

    if (isInWechatMP() === false) {
        console.log("非小程序环境,加载");
        var oScript = document.createElement("script");
        oScript.src = "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js";
        oScript.setAttribute("async", "");
        oScript.setAttribute("data-ad-client", "ca-pub-12345678");
        document.head.appendChild(oScript);
        // <script data-ad-client="ca-pub-12345678" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
    } else {
        console.log("小程序环境,跳过");
    }
}
setTimeout("load_adsense()", 500);
  1. 首先通过函数isInWechatMP,通过判断User Agent来判断目前是否处在小程序的环境中。
  2. 如果判断是小程序环境,执行load_adsense,在DOM上引入Adsense的脚本。

配置Adsense广告单元

在注册Adsense账户之后,google会给用户提供一段类似如下结构的代码:

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-12345678"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-12345678"
     data-ad-slot="12345678"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>

随后可以根据上面的代码,建立一个component:

<template>
  <div class="container">
    <ins class="adsbygoogle"
         style="display:block; text-align:center;"
         data-ad-layout="in-article"
         data-ad-format="fluid"
         data-ad-client="ca-pub-12345678"
         data-ad-slot="12345678"></ins>
  </div>
</template>

<script>
export default {
  name: "adsense-inline",
  mounted() {
    this.adsenseAddLoad();
  },
  methods: {
    adsenseAddLoad() {
      let inlineScript = document.createElement("script");
      inlineScript.type = "text/javascript";
      inlineScript.text = '(adsbygoogle = window.adsbygoogle || []).push({});'
      document.getElementsByTagName('body')[0].appendChild(inlineScript);
    }
  }
}
</script>

把原来的html片段中的脚本改为函数,塞在脚本里面,并在config.js里面导入组件:https://github.com/SUSTech-CRA/sustech-online-ng/blob/master/docs/.vuepress/config.js#L111

[
  '@vuepress/register-components',
  {
    components: {
      Adsense_unit: path.resolve(__dirname, './components/adsense-inline-article.vue'),
      // componentsDir: path.resolve(__dirname, './components')
    },
  },
]

在文章中插入广告单元

在markdown中插入以下标签即可:

<Adsense_unit>
</Adsense_unit>

渲染之后,插入标签的位置就会显示广告了。


具体的广告效果可以在 sustech.online/#关于广告 的上方进行查看。