Javascript Ad阻止程序检测又名Adblock Plus
在搜索Google和Stackoverflow几个小时后,我找不到解决方案。 我现在要做的是检测Adblock plus并显示一条简单的消息 我想做的是不使用JavaScript文件或jQuery检测Adblock plus。 大多数adblock plus检测脚本都使用一个文件,例如“show_ads.js”,该文件托管在自己的域中,其中有一行代码将其设置为“adblock=false” 使用JavaScript文件的问题是,用户可以将该JavaScript文件列为白名单,它将不再检测到该文件。我要找的是一个JavaScript,它可以直接加载到HTML中,检测是否有人在不使用文件的情况下使用了ad blocker 示例如下:Javascript Ad阻止程序检测又名Adblock Plus,javascript,html,adblock,Javascript,Html,Adblock,在搜索Google和Stackoverflow几个小时后,我找不到解决方案。 我现在要做的是检测Adblock plus并显示一条简单的消息 我想做的是不使用JavaScript文件或jQuery检测Adblock plus。 大多数adblock plus检测脚本都使用一个文件,例如“show_ads.js”,该文件托管在自己的域中,其中有一行代码将其设置为“adblock=false” 使用JavaScript文件的问题是,用户可以将该JavaScript文件列为白名单,它将不再检测到该文件
<script type="text/javascript">
// line of code that detects if using ad blocker
if so display message
</script>
//检测是否使用ad阻止程序的代码行
如果是,则显示消息
这样做的原因是没有广告拦截器可以将服务器上的JavaScript文件列为白名单。是的,我知道有其他方法可以通过NoScript插件解决这个问题,但我已经有了一个解决方案。我有一个从未尝试过的好主意,一旦我完成了,广告拦截器就无法阻止它
任何建议和例子都将不胜感激 我在现场看到的是在广告后面使用背景图像。如果adblock未激活,广告将显示在背景图像上(这使得背景图像无法查看)。如果adblock处于活动状态,则广告被阻止,用户将看到背景图像
<div id="ad-container">
<img src="../ad/ad.png" id="ad">
</div>
如果您想显示广告,即使AdBlock处于活动状态,您也必须了解AdBlock的功能
那么,为了比AdBlock更“聪明”,你到底能做些什么呢 你可以用一种永远不会“匹配”的方式来伪装你的请求(例如
http://domain.com/ae9a70e0a.png
,其中图像名称每次都是随机的,并且没有公共前缀)。据我所知,AdBlock中的规则不能包含正则表达式。规则要么不匹配广告,要么匹配太多资源。可以在服务器上重写这样一个url以指向您的广告
然而,虽然AdBlock可能无法阻止您的广告加载,但它可能仍然能够隐藏它。没有真正的办法解决这个问题。总会有一个智能的CSS选择器来选择你的元素。但是,您可以添加带有内容的背景图像。这对于广告(不可单击)没有用处,但可能有助于显示其他消息。缺点是,若有人决定阻止那个讨厌的背景图像,它也会隐藏你们的内容
就脚本而言,您可以使用ajax请求加载广告。我认为(但无法测试)如果资源无法加载(因为它被阻止),它将给出一个错误。(
$.ajax(request).error(function(){…});
在jQuery中,或在常规javascript中的某些等效项)。你可以用它来做别的事情。您可以将其包含在文档本身中,而不是外部资源中,以确保它始终运行(如果启用了javascript)。即便如此,你也无法确定“你做的任何其他事情”都会被清晰地显示出来。作为最后手段,您可以创建一个窗口。警报(…)
。假设在3个页面内,如果您使用该页面,您的访问者将永远不会回来
我可以想到的另一种方法是,在服务器上创建一个websocket(当然这不能被AdBlock阻止)。在服务器端,您需要检查在加载特定页面时是否未加载广告页面。这些信息可以通过套接字发送,可以在脚本中使用套接字执行“某些操作”。然而,这听起来非常复杂,对于检测AdBlock的脚本来说是一个巨大的开销。使用我的插件“FuckAdBlock”,它可以很容易地检测AdBlock:
例如:
fuckAdBlock.on(true, function() {
alert('AdBlock detected !');
}).on(false, function() {
alert('AdBlock is not detected =)');
});
在线示例:检测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>
更新:
Adblock Plus根据其已有的模式阻止某些请求或隐藏某些元素。其中一种模式是(在patterns.ini中):
它阻止任何包含/adframe.
的URL
2018年8月25日更新
Adblock plus改变了它查找列表和阻止广告的方式。它有一组称为订阅的列表,用于阻止。例如,此选项是默认选项:
您可以使用此文件的规则查找要使用的文件名。例如,您可以使用seo-ads.js
p.S for developers:由于某种原因,我无法让ABP在本地环境中阻止这些文件
p.S:ABP是我最喜欢的广告拦截器:-D以下是检测广告拦截器的代码。您可以了解代码是如何工作的
这当然是一场军备竞赛,我支持任何人阻止广告的权利,但我也支持依赖广告收入的网站试图说服用户,或者说服他们订阅或捐款以弥补广告收入的损失。我不赞成网站试图强迫用户看到广告,但礼貌的信息是可以的 无论如何,现在值得注意的是,有许多adblocking扩展/插件,它们都可以有不同的方式来实现,而且操作系统和浏览器之间有时也会有所不同。我发现,就我目前的目的而言,这个jQuery选择器至少足以看到AdBlock或AdBlockplus是否正在跨平台使用,至少可以跨Chrome和Firefox使用:
if($("div[id^=google_ads_iframe_] iframe:visible").length == 0) {
// pop up a message or whatever
}
如果你使用第三方广告,我发现了一个最好的脚本 免责声明我不是af
adblock = false;
[Filter]
text=/adframe.
hitCount=843
lastHit=1456391595626
function detect()
{
//create a iframe. Append the iframe to the body. And then after 100ms check if their offsetHeight, display or visibility is set such a way that user cannot see them.
//In the URL use the words specific to advertising so that Adblock can do string matching.
var iframe = document.createElement("iframe");
iframe.height = "1px";
iframe.width = "1px";
iframe.id = "ads-text-iframe";
iframe.src = "http://domain.com/ads.html";
document.body.appendChild(iframe);
setTimeout(function()
{
var iframe = document.getElementById("ads-text-iframe");
if(iframe.style.display == "none" || iframe.style.display == "hidden" || iframe.style.visibility == "hidden" || iframe.offsetHeight == 0)
{
alert("Adblock is blocking ads on this page");
iframe.remove();
}
else
{
alert("Adblock is not detecting ads on this page");
iframe.remove();
}
}, 100);
}
if($("div[id^=google_ads_iframe_] iframe:visible").length == 0) {
// pop up a message or whatever
}
<script type="text/javascript">
window.onload = function() {
var iframe = document.createElement('iframe'),
randomDomain = Math.floor(Math.random() * (10000 - 100 + 1)) + 100,
iframeLoaded = true;
iframe.src = "http://"+ randomDomain +".com/ads.html";
iframe.height = ".1px";
iframe.width = ".1px";
iframe.id = 'some-ad';
iframe.onload = function() {iframeLoaded = false;};
document.body.appendChild(iframe);
setTimeout(function() {
var someAd = document.getElementById('some-ad');
if(!iframeLoaded ||
someAd == null ||
someAd.style.display == "none" ||
someAd.style.display == "hidden" ||
someAd.style.visibility == "hidden" ||
someAd.offsetHeight == 0)
document.getElementById('ab-message').style.display = 'block';
someAd.remove();
}, 500);
};
</script>`<br>
<div id="ab-message" style="display: none">Your message here!</div>
<body style="display: block !important;">
<img src="url-containg-ad-ads-word.jpg" alt="you should see this anyway" >
</body>
var xmlhttp = new XMLHttpRequest()
xmlhttp.onreadystatechange = function() {
if( xmlhttp.readyState == XMLHttpRequest.DONE ){
if( xmlhttp.status !== 404 ){
console.log("Blocking ads")
}else{
console.log("Not blocking ads")
}
}
}
xmlhttp.open("GET", "/498100ffe815d700cd838d1/ads/showad.js", true)
xmlhttp.send()
var adBlockTester = document.createElement('div');
adBlockTester.innerHTML = ' ';
adBlockTester.className = 'adsbox';
document.body.appendChild(adBlockTester);
window.setTimeout(function() {
if( adBlockTester.offsetHeight === 0 ){
console.log("Blocking ads")
}else{
console.log("Not blocking ads")
}
document.body.removeChild(adBlockTester);
}, 60);
$('body').append('<div id="ad-container" style="position:absolute;"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=" id="ad"></div>');
var ad_container = $('body').children('#ad-container');
if(!ad_container.is(":visible")) {
// Add your warning and/or adblock detection logic here.
}
ad_container.remove();
window.onload = function() {
if (document.getElementsByClassName('google-auto-placed').length == 0){
// Adblock Detected
}
}
<div id="bait" class="pub_300x250" style="color: #fff">.</div>
if (document.getElementById("bait").offsetHeight === 0) {
// function code or alert (whatever) here.
alert("Ad-Blocker DETECTED");
}
var elem = document.createElement('div');
elem.className = 'adclass';
document.body.appendChild(elem);
window.setTimeout(function () {
var isAdblockEnabled = !(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);
if (isAdblockEnabled) {
// Adblock is enabled
}
}, 0);