Javascript 如何检测我的AdSense广告是否被阻止?

Javascript 如何检测我的AdSense广告是否被阻止?,javascript,adsense,adblock,Javascript,Adsense,Adblock,如果用户安装了某种广告拦截器,广告拦截器当然会从我的网站上删除所有广告,并在广告原来的位置留下空白。我想通过将一些其他内容(比如指向我网站最重要页面的链接)放入其中来使用这个空白空间,这样我就需要检测是否加载了AdSense javascript 我迄今为止尝试过的方法: if (!document.getElementById("google_ads_frame1")) { } 以及: 在某些情况下,这两种方法似乎都会失败,例如,如果浏览器下载AdSense javascript文件的速度稍

如果用户安装了某种广告拦截器,广告拦截器当然会从我的网站上删除所有广告,并在广告原来的位置留下空白。我想通过将一些其他内容(比如指向我网站最重要页面的链接)放入其中来使用这个空白空间,这样我就需要检测是否加载了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>';