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

如果用户安装了某种广告拦截器,广告拦截器当然会从我的网站上删除所有广告,并留下广告所在的空白区域。我想通过在其中添加一些其他内容来使用该空白空间,例如链接到我网站的大多数重要页面,我需要检测是否加载了AdSense javascript。 到目前为止我尝试过的方法:
if (!document.getElementById("google_ads_frame1"))
{
}
和:
if (typeof(window.google_render_ad) == "undefined")
{
}
在某些情况下,这两种情况似乎都失败了,例如,如果浏览器下载AdSense javascript文件的速度稍慢,它会在加载AdSense代码之前执行上述代码,并且最终会为那些甚至没有广告被屏蔽的用户隐藏广告。 您对如何确保我的代码在AdSense之后运行有任何建议吗?或者是否有其他方法可以检测到AdSense脚本未加载?     
已邀请:
window.onload
事件上运行此代码。页面加载完成后会触发
window.onload
事件。
window.onload = function() {
  // your checks
}
如果你正在使用jQuery,请使用
$(window).load(function() {
  // your checks
});
    
如果使用新的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代码(注意在调用
adsbygoogle.js
脚本时不要使用
"async"
标志):
<script src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
然后在下面添加以下代码片段:
<script>
if (!adsbygoogle.loaded) {
   // do something to alert the user
}
</script>
在广告加载时,AdSense始终会创建/设置标记
adsbygoogle.loaded
true
。您可以将检查放入setTimeout函数以将检查延迟几秒钟。     
这种超轻量级方法似乎是绝对可靠的,并且对所有广告网络都是不可知的。 将文件调用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的说明的网页。     
我建议您使用FuckAdBlock来检测AdBlock是否已激活。如果是这种情况,您可以在您想要的页面中添加尽可能多的html。 有关示例,请参阅文档:https://github.com/sitexw/FuckAdBlock     
经过一些更多的测试后,我意识到这个问题与我之前的想法不同。问题是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
}
    

要回复问题请先登录注册