Despite the age of this question, I recently found it very useful and therefore can only assume there are others still viewing it. After looking here and elsewhere I surmised that the main three client side checks for indirectly detecting an ad blocker were to check for blocked div
/img
, blocked iframe
s and blocked resources (javascript files).
Maybe it's over the top or paranoid but it covers for ad blocking systems that block only one or two out of the selection and therefore may not have been covered had you only done the one check.
On the page your are running the checks add: (I am using jQuery)
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="advertisement.js"></script>
<script type="text/javascript" src="abds.js"></script>
and add the following anywhere else on the page:
<div id="myTestAd"><img src="http://placehold.it/300x250/000000/ffffff.png&text=Advert" /></div>
I used a div with a bait name as well as an externally hosted image with the text "Advert" and in dimensions used by AdSense (thanks to placehold.it!).
In advertisement.js
you should append something to the document which we can check for later. Although it seems like you're doing the same as before, you are actually checking for the file (advertisement.js
) itself being loaded, not the output.
$(document).ready(
{
$("body").append("<div id=\"myTestAd2\">check</div>");
});
And then the ad blocker detection script which combines everything
$(document).ready(function()
{
var ifr = '<iframe id="adServer" src="http://ads.google.com/adserver/adlogger_tracker.php" width="300" height="300"></iframe>';
$("body").append(ifr);
});
$(window).on("load",function()
{
var atb = $("#myTestAd");
var atb2= $("#myTestAd2");
var ifr = $("#adServer");
setTimeout(function()
{
if( (atb.height()==0) ||
(atb.filter(":visible").length==0) ||
(atb.filter(":hidden").length>0) ||
(atb.is("hidden")) ||
(atb.css("visibility")=="hidden") ||
(atb.css("display")=="none") ||
(atb2.html()!="check") ||
(ifr.height()!=300) ||
(ifr.width()!=300) )
{
alert("You're using ad blocker you normal person, you!");
}
},500);
});
When the document is ready, i.e. the markup is loaded, we add the iframe to the document also. Then, when the window is loaded, i.e. the content incl. images etc. is loaded, we check:
- The dimensions and visibility of the first test div.
- That the content of the second test div is "check", as it would have been if the
advertimsent.js
was not blocked.
- The dimensions (and I guess visibility, as a hidden object has no height or width?) of the iframe
And the styles:
div#myTestAd, iframe#adServer
{
display: block;
position: absolute;
left: -9999px;
top: -9999px;
}
div#myTestAd2
{
display: none;
}
Hope this helps