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/
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的功能.
虽然据说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免责声明 无论如何,我与该网站没有任何关系。
它适用于大多数网站,如果他们想绕过它,他们将不得不添加自己的过滤器(对普通用户来说很复杂)或联系广告拦截过滤器并添加一个,但他们放弃这样做,因为列表过载并减慢速度广告拦截用户。
| 归档时间: |
|
| 查看次数: |
62013 次 |
| 最近记录: |