Last active
July 2, 2022 12:42
-
-
Save marifuli/c4323a290150a91a637cf447f38657de to your computer and use it in GitHub Desktop.
JS Adblock checker
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
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