如何在我的网站上发现AdBlock?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (10)
  • 关注 (0)
  • 查看 (340)

我想能够检测用户是否使用adblocking软件当他们访问我的网站。如果他们正在使用它,我想显示一个消息,要求他们关闭它,以支持这个网站。

如果你进入这个网站,你的浏览器有某种Adblock软件启用,而不是显示实际广告的网站显示一个小旗帜告诉用户,广告收入用于托管项目,他们应该考虑使用AdBlock了。

我想在我的网站上使用AdSense广告,我怎么能做到这一点?

提问于
用户回答回答于

我的解决方案并不是特定于某个广告网络,而且非常轻量级。我已经在生产部门经营了几年了。AdBlock阻塞所有包含“ADS”字的URL。所以我就是这么做的:

I added a small js file to my webroot with the name ads.js

这是该文件中唯一的一行代码。

var canRunAds = true;

然后在我页面的某个地方:

<html>
  <head>
    <script src="/js/ads.js"></script>
  </head>
  <body>
    <script>
      if( window.canRunAds === undefined ){
        // adblocker detected, show fallback
        showFallbackImage();
      }
    </script>
  </body>
</html>

像ads.js这样的文件至少会被Chrome上的这些阻止程序屏蔽:

  • AdBlock
  • AdBlock Plus
  • Adblock Pro
用户回答回答于

通过adblock简单阻止类检测到的示例:

HTML:

<div class="ad-placement" id="ablockercheck"></div>
<div id="ablockermsg" style="display: none"></div>

jQuery:

$(document).ready(function()
{
   if(!$("#ablockercheck").is(":visible"))
   {
     $("#ablockermsg").text("Please disable adblocker.").show();
   }
});

“abc检查”是一个ID,它是一个阻止程序阻塞的ID。

用户回答回答于

他们利用的事实是谷歌的广告代码创建了一个id“iframe”的iframe。

<p id="ads">
<script type="text/javascript"><!--
google_ad_client = "their-ad-code-here";
/* 160x600, droite */
google_ad_slot = "their-ad-code-here";
google_ad_width = 160;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

</p>

<script type="text/javascript"><!--
if(document.getElementsByTagName("iframe").item(0) == null)
{
    document.write("<div style='width:160px; height:600px; padding-top: 280px; margin-left:5px;border:1px solid #000000; text-align:center; font-family:century gothic, arial, helvetica, sans serif;padding-left:5px;padding-right:5px;'>Advertising seems to be blocked by your browser.<br /><br /><span style='font-size:10px'>Please notice that advertising helps us to host the project.<br /><br />If you find these ads intrusive or inappropriate, please contact me.</span><img src='http://www.playonlinux.com/images/abp.jpg' alt='Adblock Plus' /></div>");
}
--></script>
用户回答回答于

使用jQuery最简单的解决方案是:

$.ajax({
    url: "/scripts/advertisement.js", // this is just an empty js file
    dataType: "script"
}).fail(function () {
    // redirect or display message here
});
用户回答回答于

你可以检测到是否使用了Firefox AdBlock提供的默认Adblock列表。它利用了以下优点:在这个区块列表中有一个元素被css id阻塞。#bottomAd如果我在页面中添加了这样的元素并测试它的高度,我就知道加块是否是活动的:

<!-- some code before -->
<div id="bottomAd" style="font-size: 2px;">&nbsp;</div>
<!-- some code after -->

其余部分通过通常的jQuery完成:

$(document).ready( function() {
  window.setTimeout( function() {
    var bottomad = $('#bottomAd');
    if (bottomad.length == 1) {
      if (bottomad.height() == 0) {
        // adblocker active
      } else {
        // no adblocker
      }
    }      
  }, 1);
}

可以看到,我在用setTimeout至少有1ms的超时时间。我在不同的浏览器上测试过这个,大多数时候,我都会直接检查ready始终返回0;无论是否激活了该阻止程序。

用户回答回答于

要检测用户是否阻塞了广告,你只需在广告javascript中找到一个函数,然后尝试测试它:

if(!window.hasOwnProperty('google_render_ad') || window.google_render_ad === undefined) { 
    //They're blocking ads, display your banner
}

这里概述了这种方法:http://www.metamorphosite.com/detect-web-popup-blocker-software-adblock-spam

用户回答回答于

我只是使用onError事件来检测广告脚本是否可以加载。

GoogleAds的例子:

<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js" onerror="adBlockFunction();"></script>

这也可以用于其他元素,以查看广告阻止程序是否阻止了内容。

用户回答回答于

简单明了的JavaScript:

var adBlockEnabled = false;
var testAd = document.createElement('div');
testAd.innerHTML = '&nbsp;';
testAd.className = 'adsbox';
document.body.appendChild(testAd);
window.setTimeout(function() {
  if (testAd.offsetHeight === 0) {
    adBlockEnabled = true;
  }
  testAd.remove();
  console.log('AdBlock Enabled? ', adBlockEnabled)
}, 100);

  • 使用类adsbox创建一个元素(在AdBlock Plus的定义文件中定义为可移动元素)
  • 将其添加到文档中,并在短时间后阅读其偏移量
  • 如果安装了AdBlock,元素就不会有任何高度。

我认为这是目前为止检测AdBlock的最佳解决方案。

用户回答回答于

http://thepcspy.com/read/how_to_block_adblock/

使用jQuery:

function blockAdblockUser() {
    if ($('.myTestAd').height() == 0) {
        window.location = 'http://example.com/AdblockNotice.html';
    }
}

$(document).ready(function(){
    blockAdblockUser();
});

当然,你需要有一个Adblock Notice.html的登陆页面,以及。myTestAd类需要反映实际的广告容器。但这应该管用。

更好的方法是使用:hidden(或:visible,如我所用)选择器,以便display: none也检查了:

function blockAdblockUser() {
    if ($('.myTestAd').filter(':visible').length == 0) {
        // All are hidden, or "not visible", so:
        // Redirect, show dialog, do something...
    } else if ($('.myTestAd').filter(':hidden').length > 0) {
        // Maybe a different error if only some are hidden?
        // Redirect, show dialog, do something...
    }
}

当然,两者可以结合在一起。if如果需要,封锁。

请注意visibility: hidden也不会被任何一个捕获(其中布局空间停留,但广告是不可见的)。要检查这一点,可以使用另一个筛选器:

$('.myTestAd').filter(function fi(){
    return $(this).css('visibility') == 'hidden';
})

它将给你一系列“不可见”的广告元素。

用户回答回答于

不是一个直接的回答,但我会把信息放在广告后面,以便被载入……不是试图检测它,它只是在广告没有显示出来的时候出现。

所属标签

可能回答问题的人

  • 西风

    renzha.net · 站长 (已认证)

    7 粉丝1 提问9 回答
  • 四无君

    0 粉丝0 提问3 回答
  • HKC

    红客学院 · 创始人 (已认证)

    26 粉丝7 提问2 回答
  • o o

    3 粉丝490 提问2 回答

扫码关注云+社区

领取腾讯云代金券