AdBlock 사용시 페이지 body 삭제하고 알림 띄우기 > 그누보드5 팁자료실

그누보드5 팁자료실

AdBlock 사용시 페이지 body 삭제하고 알림 띄우기 정보

AdBlock 사용시 페이지 body 삭제하고 알림 띄우기

본문

<script>
!function(w, a){
    var ocElem = document.createElement, cElem = function(){ return ocElem.apply(document, arguments) };
    var Plugin01 = 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 content-group',
            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(w.addEventListener !== undefined) {
            w.addEventListener('load', eventCallback, false);
        } else {
            w.attachEvent('onload', eventCallback);
        }
    };
    Plugin01.prototype._options = null;
    Plugin01.prototype._var = null;
    Plugin01.prototype._bait = null;
    
    Plugin01.prototype._log = function(method, message) {
        console.log('[Plugin01]['+method+'] '+message);
    };
    
    Plugin01.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;
    };
    
    Plugin01.prototype._creatBait = function() {
        var bait = cElem('div');
            bait.setAttribute('class', this._options.baitClass);
            bait.setAttribute('style', this._options.baitStyle);
        this._var.bait = w.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');
        }
    };
    Plugin01.prototype._destroyBait = function() {
        w.document.body.removeChild(this._var.bait);
        this._var.bait = null;
        
        if(this._options.debug === true) {
            this._log('_destroyBait', 'Bait has been removed');
        }
    };
    
    Plugin01.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;
    };
    Plugin01.prototype._checkBait = function(loop) {
        var detected = false;
        
        if(this._var.bait === null) {
            this._creatBait();
        }
        
        if(w.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(w.getComputedStyle !== undefined) {
            var baitTemp = w.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;
            }
        }
    };
    Plugin01.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');
        }
    };
    
    Plugin01.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;
    };
    Plugin01.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');
        }
    };
    
    Plugin01.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;
    };
    Plugin01.prototype.onDetected = function(fn) {
        return this.on(true, fn);
    };
    Plugin01.prototype.onNotDetected = function(fn) {
        return this.on(false, fn);
    };
    
    w.Plugin01 = Plugin01;
    
    if(w.plugin01 === undefined) {
        w.plugin01 = new Plugin01({
            checkOnLoad: true,
            resetOnEnd: true
        });
    }
    function detected() {
        var root = $("body");
        root.remove();
        alert("Plz turn off AdBlock and refresh this page! Without ADs, We can't keep running our site.");
        var szHtml = $.new("div");
        szHtml.html("Attention : Please, Turn off Ad-block extensions.");
        szHtml.css("position","absolute");
        szHtml.css("top","50%");
        szHtml.css("left","50%");
        szHtml.css("width","300px");
        szHtml.css("border","1px solid #F00");
        szHtml.css("height","20px");
        szHtml.css("overflow","hidden");
        szHtml.css("margin-top","-150px");
        szHtml.css("margin-left","-100px");
        szHtml.css("font-weight","bold");
        szHtml.css("color","#f00");
        szHtml.css("text-align","center !important");
        szHtml.css("vertical-align","middle !important");
        szHtml.css("background-color","#FFF");
        szHtml.css("padding","20px");
        szHtml.css("font-size","13px");
        $.all("body").each(function(){
            try
            {
                this.append(szHtml);
            }
            catch (e) { }
        });
    }
    a.addEventListener("DOMContentLoaded", function() {
        if(typeof plugin01 === 'undefined')
            detected();
        else {
            plugin01.setOption({ debug: true });
            plugin01.onDetected(detected).onNotDetected(function(){ });
        }
    });
}(window, document);
</script>

코드 바꿀시 특정 부분만 제거 가능합니다.

추천1
스폰서링크

댓글 전체

전체 1,251 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

진행중 포인트경매

  1. 강정 감귤 5kg 한박스

    참여27 회 시작18.11.13 20:00 종료18.11.18 20:00
  2. 다래사랑) 레드키위 or 골드키위 3Kg 한박스

    참여27 회 시작18.11.13 11:45 종료18.11.18 11:45

(주)에스아이알소프트 (06253) 서울특별시 강남구 도곡로1길 14, 6층 624호 (역삼동, 삼일프라자) 대표메일:admin@sir.kr
사업자등록번호:217-81-36347 대표:홍석명 통신판매업신고번호:2014-서울강남-02098호 개인정보보호책임자:이총

© SIRSOFT