Ad Blocker检测AKA Adblock Plus

chi*_*ers 43 html javascript adblock

在搜索谷歌和Stackoverflow几个小时后,我找不到解决方案.我正在尝试检测Adblock plus并显示一条简单的消息.

我想要做的是在使用JavaScript文件或jQuery的情况下检测Adblock plus .大多数adblock加检​​测脚本都使用了一个文件,例如"show_ads.js",它存放在自己的域中,并带有一行来设置它"adblock = false;"

使用JavaScript文件的问题是,用户可以白名单列出该JavaScript文件,它将不再检测它.我正在寻找的是一个直接加载到HTML中的JavaScript,可以检测是否有人在不使用文件的情况下使用广告拦截器.

示例如下:

<script type="text/javascript">
 // line of code that detects if using ad blocker

 if so display message
 </script>
Run Code Online (Sandbox Code Playgroud)

这样做的原因是没有广告拦截器可以在服务器上列出JavaScript文件.是的,我知道还有其他方法可以使用NoScript插件解决这个问题,但我已经有了解决方法.我有一个从未尝试过的好主意,一旦我完成它,广告拦截器就无法阻止它.

任何建议和例子将不胜感激.

und*_*one 75

你不需要有一个插件来检测adblock,只需使用:

<script type="text/javascript">
    var adblock = true;
</script>
<script type="text/javascript" src="adframe.js"></script>
<script type="text/javascript">
    if(adblock) {
          //adblock is installed and enabled on this site :-D
    }
</script>
Run Code Online (Sandbox Code Playgroud)

adframe.js的内容:

adblock = false;
Run Code Online (Sandbox Code Playgroud)

更新: Adblock Plus根据已有的模式阻止某些请求或隐藏某些元素.其中一种模式是(在patterns.ini中):

[Filter]
text=/adframe.
hitCount=843
lastHit=1456391595626
Run Code Online (Sandbox Code Playgroud)

它会阻止其中的任何URL /adframe..

2018年8月25日更新

Adblock plus改变了查找列表的方式并阻止了广告.它有一堆名为subscriptions的列表,用于阻塞.例如,这是默认的一个:

https://easylist-downloads.adblockplus.org/easylist.txt

您可以使用此文件上的规则来查找要使用的文件名.例如,您可以使用seo-ads.js

PS for developer:由于某些原因,我无法让ABP在本地环境中阻止这些文件.

PS:ABP是我最喜欢的广告拦截器:-D


Sit*_*eXw 19

使用我的插件"FuckAdBlock",它可以很容易地检测到AdBlock:https: //github.com/sitexw/FuckAdBlock

示例:

fuckAdBlock.on(true, function() {
    alert('AdBlock detected !');
}).on(false, function() {
    alert('AdBlock is not detected =)');
});
Run Code Online (Sandbox Code Playgroud)

在线示例:http://fuckadblock.sitexw.fr/

  • 这就是fork"BlockAdBlock"存在的原因:https://github.com/sitexw/BlockAdBlock (25认同)
  • 当整个脚本可以在简短的答案中解释时,对于链接依赖的答案进行了投票 (3认同)

Sum*_*ai8 10

我在该领域看到的是使用广告背后的背景图片.如果adblock未处于活动状态,则广告将显示在背景图片上(这会使背​​景图片无法显示).如果adblock处于活动状态,广告将被屏蔽,用户将看到背景图片.

<div id="ad-container">
  <img src="../ad/ad.png" id="ad">
</div>
Run Code Online (Sandbox Code Playgroud)

使用CSS:

#ad-container {
  background-image: url( http://domain.com/pleasedonotuseadblocker.png );
  height: 200px;
  width: 200px;
}

#ad {
  height: 200px;
  width: 200px;
}
Run Code Online (Sandbox Code Playgroud)

  • 即使人们使用adblock,提高您的网站使用广告为网站提供资金的意识也会比强制展示广告效果更好.当网站用来强迫您查看广告时,有更好的选择.我只使用adblock,因为每个网站到处都使用恼人的广告.我不介意将我真正想要支持的网站列入白名单. (4认同)
  • @hakre我很抱歉你没有以广告谋生,我相信一个免费和开放的互联网,但当你让人们阻止你的唯一来源,如果收入支付服务器账单等,很难坐在那里. (2认同)
  • 当然,我只访问网站的内容,而不是广告.如果网站所有者觉得需要广告,那就是他们的选择.我选择安装广告拦截器,如果网站对此抱怨,我甚至不再访问它们了.在某个地方是一个交叉的边界,我的是网站恳求你禁用adblocker.你的旅费可能会改变.广告只是信息社会中的污染,它利用了人类的自然利益.这是反社会和有毒的行为. (2认同)

Sum*_*ai8 6

如果您希望展示广告,即使AdBlock处于有效状态,您也必须了解AdBlock的功能.

  1. AdBlock可以阻止加载资源
  2. AdBlock可以隐藏DOM中的特定元素.

虽然据说AdBlock也可以修改CSS,但除了隐藏和折叠元素之外,我找不到任何其他文档.


那么究竟你能做些什么才能比AdBlock更"聪明"?

您可以以永远不会"匹配"的方式伪装您的请求(例如http://domain.com/ae9a70e0a.png,图像名称每次都是随机的,没有共同的前缀).据我所知,AdBlock中的规则不能包含正则表达式.规则要么不匹配广告,要么匹配太多资源.可以在服务器上重写这样的网址以指向您的广告.

但是,虽然AdBlock可能无法阻止您的广告加载,但它仍然可以隐藏它.没有真正的解决方法.将始终有一个智能的CSS选择器,它将 - 选择你的元素.但是,您可以添加包含内容的背景图像.这对广告(不可点击)无用,但可能会帮助您显示其他消息.缺点是,如果有人决定阻止那个恼人的背景图片,它也会隐藏你的内容.


就脚本而言,您可以使用ajax请求加载广告.我想(但无法测试)如果无法加载资源(因为它被阻止),它将会出错.($.ajax( request ).error( function() { ... } );在jQuery或常规javascript中的一些等价物).您可以使用它来做其他事情.您可以将其包含在文档本身而不是外部资源中,以确保它始终运行(如果启用了javascript).即使这样,你也无法确定"你做了什么"将会被明显地显示出来.作为最后的手段,你可以做一个window.alert( ... ).假设在3页内,如果您使用该访问者,您的访问者将永远不会回来.

我能想到的另一种方法是向服务器创建一个websocket(这不能被AdBlock阻止).在服务器端,您需要检查在加载某个页面时是否未加载广告页面.这些信息可以通过套接字发送,套接字可以在脚本中用来做"某事".然而,这听起来很复杂,并且对于"只是"检测AdBlock的脚本来说是一个巨大的开销.


chi*_*ers -3

如果您使用第三方广告,我找到了最好的脚本之一。

antiblock.org免责声明 无论如何,我与该网站没有任何关系。

它适用于大多数网站,如果他们想绕过它,他们将不得不添加自己的过滤器(对普通用户来说很复杂)或联系广告拦截过滤器并添加一个,但他们放弃这样做,因为列表过载并减慢速度广告拦截用户。