2011-02-19 37 views
1

如果用户安装了某种广告拦截器,广告拦截器当然会从我的网站上删除所有广告,并且会留下广告曾经存在的空白空间。我想通过在其中添加一些其他内容来使用该空白空间,例如链接到我网站的最重要页面,以便我需要检测AdSense JavaScript是否已加载。如何检测我的AdSense广告是否被屏蔽?

的方法,我到目前为止已经试过:

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

和:

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

这两项似乎在某些情况下会失败,例如,如果浏览器下载的AdSense的JavaScript文件有点慢,它会在加载AdSense代码之前执行上述代码,并最终隐藏甚至没有阻止广告的用户的广告。

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

+0

相关:http://stackoverflow.com/questions/4869154/how-to-detect-adblock-on-my-website –

回答

2

window.onload事件中运行此代码。当页面完成加载时触发事件window.onload

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

如果你使用jQuery,使用

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

您的jQuery的例子是简写'$ (document).ready()',它将在'window.onload'之前触发。您可以使用jQuery通过'$(window).load(fn)'附加'window.onload'处理程序。 –

+0

@Dave Ward,哦,是的,修复。谢谢:) – Dogbert

+0

是的工作,现在我觉得很愚蠢,因为之前不问这个问题:) –

0

一些测试,我意识到,我以前认为问题不在于时机的把握之后。问题在于AdSense开始使用一些新代码,该代码没有“google_render_ad”功能,也没有创建ID为“google_ads_frame1”(新ID为“aswift_0”)的iframe。 考虑到的AdSense现在使用至少两个不同的ID为I帧我做的,不论其ID的只是IFRAME元素的存在检查新的检测代码:

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

请注意,如果你使用的是FB Like,Gplus +1或类似的,你会在页面上有很多的iframe。 – Omiod

3

如果使用新的AdSense代码,你可以做一个简单的检查,而不诉诸内容或CSS检查。

投放广告的正常您的标记:

(调用 adsbygoogle.js脚本的时候注意不要使用 "async"标志)
<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代码:

<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

这应该是upvoted的答案。提及setTimeout的荣誉。更好的办法是把setTimeout放在'$(document).ready()'的内部。 –

1

这种超轻量级的方法似乎是无懈可击的,对所有广告网络都是不可知的。

拨打电话广告。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指令的页面之前把这个代码。

1

我建议你使用FuckAdBlock来检测AdBlock是否被激活。如果是这种情况,您可以自由地在您想要的页面中添加尽可能多的html。

见实例文档:https://github.com/sitexw/FuckAdBlock