Javascript 如何检测我的AdSense广告是否被阻止?
如果用户安装了某种广告拦截器,广告拦截器当然会从我的网站上删除所有广告,并在广告原来的位置留下空白。我想通过将一些其他内容(比如指向我网站最重要页面的链接)放入其中来使用这个空白空间,这样我就需要检测是否加载了AdSense javascript 我迄今为止尝试过的方法:Javascript 如何检测我的AdSense广告是否被阻止?,javascript,adsense,adblock,Javascript,Adsense,Adblock,如果用户安装了某种广告拦截器,广告拦截器当然会从我的网站上删除所有广告,并在广告原来的位置留下空白。我想通过将一些其他内容(比如指向我网站最重要页面的链接)放入其中来使用这个空白空间,这样我就需要检测是否加载了AdSense javascript 我迄今为止尝试过的方法: if (!document.getElementById("google_ads_frame1")) { } 以及: 在某些情况下,这两种方法似乎都会失败,例如,如果浏览器下载AdSense javascript文件的速度稍
if (!document.getElementById("google_ads_frame1"))
{
}
以及:
在某些情况下,这两种方法似乎都会失败,例如,如果浏览器下载AdSense javascript文件的速度稍慢,它将在加载AdSense代码之前执行上述代码,而我最终会为甚至没有阻止广告的用户隐藏广告
对于如何确保我的代码在AdSense之后运行,您有什么建议吗?或者其他检测AdSense脚本未加载的方法?在
窗口运行此代码。onload
事件<代码>窗口。当页面完成加载时,将触发onload事件
window.onload = function() {
// your checks
}
如果您使用jQuery,请使用
$(window).load(function() {
// your checks
});
经过更多的测试后,我意识到问题并不像我之前想的那个样和时间有关。问题是AdSense开始使用一些新代码,这些代码没有“google_render_ad”功能,也没有创建ID为“google_ads_frame1”(新ID为“aswift_0”)的iframe。 考虑到AdSense现在对iframe使用至少两个不同的ID,我制作了新的检测代码,只检查iframe元素是否存在,而不管其ID如何:
if (document.getElementsByTagName("iframe").length === 0)
{
// ad is blocked
}
如果使用新的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>
然后在下面添加以下代码片段:
<script>
if (!adsbygoogle.loaded) {
// do something to alert the user
}
</script>
如果(!adsbygoogle.loaded){
//做一些事情来提醒用户
}
当加载广告时,AdSense总是创建/设置标志
adsbygoogle.loaded
为true
。您可以将检查放在setTimeout函数中,将检查延迟几秒钟。这种超轻量方法似乎是绝对正确的,对所有广告网络都是不可知的
将文件调用ads.js放在根文件夹中,并在其中添加以下行:
var can_run_ads = true;
Adblock不允许加载名为ads.js的文件。因此,只需将此代码放在
if(window.can_run_ads===未定义){
警报('请禁用Adblock,*********!');
}
';
我强烈建议将用户重定向到一个页面,该页面上有关于如何删除Adblock的说明。我建议您使用FuckAdBlock来检测Adblock是否被激活。如果是这种情况,您可以在页面中随意添加任意数量的html
有关示例,请参阅文档:您的jQuery示例是
$(document.ready()
)的简写,它将在窗口之前启动。onload
。您可以使用jQuery附加窗口。通过$(窗口)onload
处理程序。load(fn)
@Dave Ward,哦,是的,修复了。谢谢:)是的,这很有效,现在我觉得在问这个问题之前没有尝试一下很愚蠢:)请注意,如果你使用FB-Like、Gplus+1或类似的,你会在页面上有很多iFrame。这应该是投票结果。提及超时的荣誉。更好的方法是将setTimeout放入一个$(document).ready()
。如果您有多个adsense广告,会发生什么情况?这不会检查广告是否呈现,但会检查google adsense代码是否被阻止。如果没有安装Adblock,则此操作不起作用。显示为被阻止…已使用window.adsbygoogle.loaded
nuxtjsRelated:
<script>
if (!adsbygoogle.loaded) {
// do something to alert the user
}
</script>
var can_run_ads = true;
<script src="/ads.js"></script>
<script>
if(window.can_run_ads === undefined) {
alert('Please Disable Adblock, ****** ******!');
}
</script>';