如何检测我的AdSense广告是否被屏蔽?

时间:2011-02-19 20:31:28

标签: javascript adsense adblock

如果用户安装了某种广告拦截器,广告拦截器当然会从我的网站上删除所有广告,并留下广告所在的空白区域。我想通过在其中添加一些其他内容来使用该空白空间,例如链接到我网站的大多数重要页面,我需要检测是否已加载AdSense javascript。

到目前为止我尝试过的方法:

if (!document.getElementById("google_ads_frame1"))
{
}

if (typeof(window.google_render_ad) == "undefined")
{
}

在某些情况下,这两种情况似乎都失败了,例如,如果浏览器下载AdSense javascript文件的速度稍慢,它会在加载AdSense代码之前执行上述代码,并且我最终会为那些甚至没有的用户隐藏广告广告已被屏蔽。

对于如何确保我的代码在AdSense之后运行,您有什么建议吗?或者是其他一些检测未加载AdSense脚本的方式?

5 个答案:

答案 0 :(得分:6)

如果使用新的AdSense代码,您可以轻松检查,而无需借助内容或CSS检查。

在标记中正常放置广告:

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

然后您在页面的底部处调用adsense代码(请注意,在调用"async"脚本时请勿使用adsbygoogle.js标记):

<script src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

然后在下面添加以下代码片段:

<script>
if (!adsbygoogle.loaded) {
   // do something to alert the user
}
</script>

AdSense会在广告加载时始终创建/设置标记adsbygoogle.loadedtrue。您可以将检查放在setTimeout函数中,以将检查延迟几秒钟。

答案 1 :(得分:2)

window.onload事件上运行此代码。页面加载完成后会触发window.onload事件。

window.onload = function() {
  // your checks
}

如果您使用的是jQuery,请使用

$(window).load(function() {
  // your checks
});

答案 2 :(得分:1)

这种超轻量级方法似乎绝对可靠,并且对所有广告网络都是不可知的。

在根文件夹中放置文件调用 ads.js ,并在其中添加此行:

var can_run_ads = true;

Adblock不允许加载名为 ads.js 的文件。因此,只需将此代码放在</body>

之前
<script src="/ads.js"></script>
<script>
if(window.can_run_ads === undefined) {
    alert('Please Disable Adblock, ****** ******!');
}
</script>';

我强烈建议您将用户重定向到包含如何删除 Adblock 的说明的网页。

答案 3 :(得分:1)

我建议您使用FuckAdBlock来检测AdBlock是否已激活。如果是这种情况,您可以在页面中添加任意数量的html。

请参阅文档以获取示例:https://github.com/sitexw/FuckAdBlock

答案 4 :(得分:0)

经过多次测试后,我意识到这个问题与我之前的想法不同。问题是AdSense开始使用一些新代码,此代码没有“google_render_ad”功能,也没有创建ID为“google_ads_frame1”的iframe(新ID为“aswift_0”)。 考虑到AdSense现在至少为iframe使用了两个不同的ID,我制作了新的检测代码,只检查是否存在iframe元素,无论其ID如何:

if (document.getElementsByTagName("iframe").length === 0)
{
    // ad is blocked
}