如果用户安装了某种广告拦截器,广告拦截器当然会从我的网站上删除所有广告,并留下广告所在的空白区域。我想通过在其中添加一些其他内容来使用该空白空间,例如链接到我网站的大多数重要页面,我需要检测是否已加载AdSense javascript。
到目前为止我尝试过的方法:
if (!document.getElementById("google_ads_frame1"))
{
}
和
if (typeof(window.google_render_ad) == "undefined")
{
}
在某些情况下,这两种情况似乎都失败了,例如,如果浏览器下载AdSense javascript文件的速度稍慢,它会在加载AdSense代码之前执行上述代码,并且我最终会为那些甚至没有的用户隐藏广告广告已被屏蔽。
对于如何确保我的代码在AdSense之后运行,您有什么建议吗?或者是其他一些检测未加载AdSense脚本的方式?
答案 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.loaded
至true
。您可以将检查放在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
}