Skip to content

Instantly share code, notes, and snippets.

@marifuli
Last active July 2, 2022 12:42
Show Gist options
  • Save marifuli/c4323a290150a91a637cf447f38657de to your computer and use it in GitHub Desktop.
Save marifuli/c4323a290150a91a637cf447f38657de to your computer and use it in GitHub Desktop.
JS Adblock checker
/*
After loading this js,Do Smething like this:
if(typeof blockAdBlock === 'undefined') {
adBlockDetected();
} else {
blockAdBlock.onDetected(adBlockDetected);
blockAdBlock.onNotDetected(adBlockNotDetected);
// and|or
blockAdBlock.on(true, adBlockDetected);
blockAdBlock.on(false, adBlockNotDetected);
// and|or
blockAdBlock.on(true, adBlockDetected).onNotDetected(adBlockNotDetected);
}
*/
(function(window){var BlockAdBlock=function(options){this._options={checkOnLoad:false,resetOnEnd:false,loopCheckTime:50,loopMaxNumber:5,baitClass:'pub_300x250 pub_300x250m pub_728x90 text-ad textAd text_ad text_ads text-ads text-ad-links',baitStyle:'width: 1px !important; height: 1px !important; position: absolute !important; left: -10000px !important; top: -1000px !important;',debug:false};this._var={version:'3.2.1',bait:null,checking:false,loop:null,loopNumber:0,event:{detected:[],notDetected:[]}};if(options!==undefined){this.setOption(options);}
var self=this;var eventCallback=function(){setTimeout(function(){if(self._options.checkOnLoad===true){if(self._options.debug===true){self._log('onload->eventCallback','A check loading is launched');}
if(self._var.bait===null){self._creatBait();}
setTimeout(function(){self.check();},1);}},1);};if(window.addEventListener!==undefined){window.addEventListener('load',eventCallback,false);}else{window.attachEvent('onload',eventCallback);}};BlockAdBlock.prototype._options=null;BlockAdBlock.prototype._var=null;BlockAdBlock.prototype._bait=null;BlockAdBlock.prototype._log=function(method,message){console.log('[BlockAdBlock]['+method+'] '+message);};BlockAdBlock.prototype.setOption=function(options,value){if(value!==undefined){var key=options;options={};options[key]=value;}
for(var option in options){this._options[option]=options[option];if(this._options.debug===true){this._log('setOption','The option "'+option+'" he was assigned to "'+options[option]+'"');}}
return this;};BlockAdBlock.prototype._creatBait=function(){var bait=document.createElement('div');bait.setAttribute('class',this._options.baitClass);bait.setAttribute('style',this._options.baitStyle);this._var.bait=window.document.body.appendChild(bait);this._var.bait.offsetParent;this._var.bait.offsetHeight;this._var.bait.offsetLeft;this._var.bait.offsetTop;this._var.bait.offsetWidth;this._var.bait.clientHeight;this._var.bait.clientWidth;if(this._options.debug===true){this._log('_creatBait','Bait has been created');}};BlockAdBlock.prototype._destroyBait=function(){window.document.body.removeChild(this._var.bait);this._var.bait=null;if(this._options.debug===true){this._log('_destroyBait','Bait has been removed');}};BlockAdBlock.prototype.check=function(loop){if(loop===undefined){loop=true;}
if(this._options.debug===true){this._log('check','An audit was requested '+(loop===true?'with a':'without')+' loop');}
if(this._var.checking===true){if(this._options.debug===true){this._log('check','A check was canceled because there is already an ongoing');}
return false;}
this._var.checking=true;if(this._var.bait===null){this._creatBait();}
var self=this;this._var.loopNumber=0;if(loop===true){this._var.loop=setInterval(function(){self._checkBait(loop);},this._options.loopCheckTime);}
setTimeout(function(){self._checkBait(loop);},1);if(this._options.debug===true){this._log('check','A check is in progress ...');}
return true;};BlockAdBlock.prototype._checkBait=function(loop){var detected=false;if(this._var.bait===null){this._creatBait();}
if(window.document.body.getAttribute('abp')!==null||this._var.bait.offsetParent===null||this._var.bait.offsetHeight==0||this._var.bait.offsetLeft==0||this._var.bait.offsetTop==0||this._var.bait.offsetWidth==0||this._var.bait.clientHeight==0||this._var.bait.clientWidth==0){detected=true;}
if(window.getComputedStyle!==undefined){var baitTemp=window.getComputedStyle(this._var.bait,null);if(baitTemp&&(baitTemp.getPropertyValue('display')=='none'||baitTemp.getPropertyValue('visibility')=='hidden')){detected=true;}}
if(this._options.debug===true){this._log('_checkBait','A check ('+(this._var.loopNumber+1)+'/'+this._options.loopMaxNumber+' ~'+(1+this._var.loopNumber*this._options.loopCheckTime)+'ms) was conducted and detection is '+(detected===true?'positive':'negative'));}
if(loop===true){this._var.loopNumber++;if(this._var.loopNumber>=this._options.loopMaxNumber){this._stopLoop();}}
if(detected===true){this._stopLoop();this._destroyBait();this.emitEvent(true);if(loop===true){this._var.checking=false;}}else if(this._var.loop===null||loop===false){this._destroyBait();this.emitEvent(false);if(loop===true){this._var.checking=false;}}};BlockAdBlock.prototype._stopLoop=function(detected){clearInterval(this._var.loop);this._var.loop=null;this._var.loopNumber=0;if(this._options.debug===true){this._log('_stopLoop','A loop has been stopped');}};BlockAdBlock.prototype.emitEvent=function(detected){if(this._options.debug===true){this._log('emitEvent','An event with a '+(detected===true?'positive':'negative')+' detection was called');}
var fns=this._var.event[(detected===true?'detected':'notDetected')];for(var i in fns){if(this._options.debug===true){this._log('emitEvent','Call function '+(parseInt(i)+1)+'/'+fns.length);}
if(fns.hasOwnProperty(i)){fns[i]();}}
if(this._options.resetOnEnd===true){this.clearEvent();}
return this;};BlockAdBlock.prototype.clearEvent=function(){this._var.event.detected=[];this._var.event.notDetected=[];if(this._options.debug===true){this._log('clearEvent','The event list has been cleared');}};BlockAdBlock.prototype.on=function(detected,fn){this._var.event[(detected===true?'detected':'notDetected')].push(fn);if(this._options.debug===true){this._log('on','A type of event "'+(detected===true?'detected':'notDetected')+'" was added');}
return this;};BlockAdBlock.prototype.onDetected=function(fn){return this.on(true,fn);};BlockAdBlock.prototype.onNotDetected=function(fn){return this.on(false,fn);};window.BlockAdBlock=BlockAdBlock;if(window.blockAdBlock===undefined){window.blockAdBlock=new BlockAdBlock({checkOnLoad:true,resetOnEnd:true});}})(window);var ready=(function(){var readyList,DOMContentLoaded,class2type={};class2type["[object Boolean]"]="boolean";class2type["[object Number]"]="number";class2type["[object String]"]="string";class2type["[object Function]"]="function";class2type["[object Array]"]="array";class2type["[object Date]"]="date";class2type["[object RegExp]"]="regexp";class2type["[object Object]"]="object";var ReadyObj={isReady:false,readyWait:1,holdReady:function(hold){if(hold){ReadyObj.readyWait++;}else{ReadyObj.ready(true);}},ready:function(wait){if((wait===true&&!--ReadyObj.readyWait)||(wait!==true&&!ReadyObj.isReady)){if(!document.body){return setTimeout(ReadyObj.ready,1);}
ReadyObj.isReady=true;if(wait!==true&&--ReadyObj.readyWait>0){return;}
readyList.resolveWith(document,[ReadyObj]);}},bindReady:function(){if(readyList){return;}
readyList=ReadyObj._Deferred();if(document.readyState==="complete"){return setTimeout(ReadyObj.ready,1);}
if(document.addEventListener){document.addEventListener("DOMContentLoaded",DOMContentLoaded,false);window.addEventListener("load",ReadyObj.ready,false);}else if(document.attachEvent){document.attachEvent("onreadystatechange",DOMContentLoaded);window.attachEvent("onload",ReadyObj.ready);var toplevel=false;try{toplevel=window.frameElement==null;}catch(e){}
if(document.documentElement.doScroll&&toplevel){doScrollCheck();}}},_Deferred:function(){var
callbacks=[],fired,firing,cancelled,deferred={done:function(){if(!cancelled){var args=arguments,i,length,elem,type,_fired;if(fired){_fired=fired;fired=0;}
for(i=0,length=args.length;i<length;i++){elem=args[i];type=ReadyObj.type(elem);if(type==="array"){deferred.done.apply(deferred,elem);}else if(type==="function"){callbacks.push(elem);}}
if(_fired){deferred.resolveWith(_fired[0],_fired[1]);}}
return this;},resolveWith:function(context,args){if(!cancelled&&!fired&&!firing){args=args||[];firing=1;try{while(callbacks[0]){callbacks.shift().apply(context,args);}}
finally{fired=[context,args];firing=0;}}
return this;},resolve:function(){deferred.resolveWith(this,arguments);return this;},isResolved:function(){return!!(firing||fired);},cancel:function(){cancelled=1;callbacks=[];return this;}};return deferred;},type:function(obj){return obj==null?String(obj):class2type[Object.prototype.toString.call(obj)]||"object";}}
function doScrollCheck(){if(ReadyObj.isReady){return;}
try{document.documentElement.doScroll("left");}catch(e){setTimeout(doScrollCheck,1);return;}
ReadyObj.ready();}
if(document.addEventListener){DOMContentLoaded=function(){document.removeEventListener("DOMContentLoaded",DOMContentLoaded,false);ReadyObj.ready();};}else if(document.attachEvent){DOMContentLoaded=function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",DOMContentLoaded);ReadyObj.ready();}};}
function ready(fn){ReadyObj.bindReady();var type=ReadyObj.type(fn);readyList.done(fn);}
return ready;})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment