5

如果用户安装了某种广告拦截器,广告拦截器当然会从我的网站上删除所有广告,并在广告曾经存在的地方留下空白空间。我想通过在其中放置一些其他内容来使用该空白空间,例如指向我网站最重要页面的链接,为此我需要检测是否加载了 AdSense javascript。

到目前为止我尝试过的方法:

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

和:

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

在某些情况下,这两种方法似乎都失败了,例如,如果浏览器下载 AdSense javascript 文件的速度有点慢,它会在加载 AdSense 代码之前执行上述代码,我最终会为甚至没有广告被屏蔽的用户隐藏广告。

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

4

6 回答 6

9

如果使用新的 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 函数中,以将检查延迟几秒钟。

于 2015-03-28T19:12:34.767 回答
4

这种超轻量级的方法似乎是万无一失的,并且对所有广告网络都是不可知的。

在根文件夹中放置一个名为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说明的页面。

于 2015-08-12T23:41:20.653 回答
3

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

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

如果您使用的是 jQuery,请使用

$(window).load(function() {
  // your checks
});
于 2011-02-19T20:37:16.960 回答
1

我建议你使用 FuckAdBlock 来检测 AdBlock 是否被激活。如果是这种情况,您可以随意在页面中添加任意数量的 html。

有关示例,请参阅文档:https ://github.com/sitexw/FuckAdBlock

于 2015-08-20T09:27:35.263 回答
1

检测 ins.adsbygoogle 中的 data-ad-status="unfilled" 参数以了解广告位是否为空。

于 2021-09-04T06:13:25.943 回答
-3

经过更多测试后,我意识到问题与我之前认为的时间无关。问题是 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
}
于 2011-02-20T14:57:02.093 回答