减少AdSense的JS请求#
谷歌官方的代码
1
2
3
4
5
6
7
8
9
10
| <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-id"
data-ad-slot="id"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
|
分解一下,首先通过async异步请求加载adsbygoogle.js核心文件,待加载完成后再push到ins内,显示广告内容。
当我们需要放入广告位时,就将该段代码放入。可是如果有多个广告位的时候,就会引用多个相同的JS。
Q:如果我的网页上有多个广告单元,我是否要为每个广告单元添加 <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
A:不,不需要,adsbygoogle.js 可以一次性加载。
上述是谷歌官方给的QA,由此可知我们不需要多次加载JS
如果你有多个广告位,那就可以把该段引入JS的代码,放到<head>
里,既可以达到一次载入JS,所有<ins>
都可以接到广告。
JS监听加载#
将代码改为如下
1
2
3
4
5
6
7
8
9
10
| <script>
window.onload = function() {
setTimeout(function() {
let script = document.createElement("script");
script.setAttribute("async", "");
script.src = "//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js";
document.body.appendChild(script);
}, 2e3);
}
</script>
|
Hexo icarus v3.0则修改成
1
2
3
4
5
6
7
8
9
| const adjs = `window.onload = function() {
setTimeout(function() {
let script = document.createElement("script");
script.setAttribute("async", "");
script.src = "//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js";
document.body.appendChild(script);
}, 2e3);}`;
{adsenseClientId ? <script dangerouslySetInnerHTML={{ __html: adjs }}></script> : null}
|
转载自ShenYun,篱落闲栈。