UNPKG

@horat1us/detect-ad-block

Version:
251 lines (213 loc) 6.68 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); function Check(url, mode) { return new Promise(function (end) { if (mode === 'ajax') { var readyStates = [false, false, false, false]; var status = null; var respond = function respond(responseForce) { if (responseForce !== undefined) { end(responseForce); } else { if (status === 0) { end(true); return; } for (var i = 0; i < 4; i++) { if (readyStates[i] === false) { end(true); return; } } end(false); } }; var xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function () { readyStates[xmlHttp.readyState - 1] = true; try { status = xmlHttp.status; } catch (e) {} if (xmlHttp.readyState === 4) { respond(); } }; try { xmlHttp.open('GET', url, true); xmlHttp.send(); } catch (e) { if (e.result == '2153644038') { respond(true); } } } else if (mode === 'script') { var element = document.createElement('script'); element.src = url; element.onerror = function () { end(true); window.document.body.removeChild(element); }; element.onload = function () { end(false); window.document.body.removeChild(element); }; window.document.body.appendChild(element); } else { end(false); } }); } var HttpAjaxOptions = Object.freeze({ baitUrl: '/ad/banner/_adsense_/_adserver/_adview_.ad.json?adzone=top&adsize=300x250&advid={RANDOM}', baitMode: "ajax" }); var HttpScriptOptions = Object.freeze({ baitUrl: '/ad/banner/_adsense_/_adserver/_adview_.ad.js?adzone=top&adsize=300x250&advid={RANDOM}', baitMode: "script" }); function Http(options) { return { detect: function HttpDetectPlugin(resolve) { Check(options.baitUrl.replace('{RANDOM}', Number(new Date()).toString()), options.baitMode).then(resolve); }, name: "detect-ad-block/http" + (options.name || ":" + options.baitMode), version: 1 }; } var ajax = Http(HttpAjaxOptions); var script = Http(HttpScriptOptions); var HtmlDefaultOptions = Object.freeze({ name: "", 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;', interval: 50, timeout: 950 }); function Bait(className, style) { var element = window.document.createElement('div'); element.setAttribute('class', className); element.setAttribute('style', style); element.offsetParent; element.offsetHeight; element.offsetLeft; element.offsetTop; element.offsetWidth; element.clientHeight; element.clientWidth; function append() { var parent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.document.body; parent.appendChild(element); } function check() { if (element.offsetParent === null || element.offsetHeight == 0 || element.offsetLeft == 0 || element.offsetTop == 0 || element.offsetWidth == 0 || element.clientHeight == 0 || element.clientWidth == 0) { return true; } var computedStyle = window.getComputedStyle(element); return computedStyle.getPropertyValue('display') == 'none' || computedStyle.getPropertyValue('visibility') == 'hidden'; } function remove() { element.parentElement && element.parentElement.removeChild(element); } return Object.freeze({ element: element, append: append, check: check, remove: remove }); } function Html() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : HtmlDefaultOptions; return { detect: function HtmlDetectPlugin(resolve) { var bait = Bait(options.baitClass, options.baitStyle); var _done = function done(result) { resolve(result); bait.remove(); clearInterval(intervalId); _done = undefined; }; bait.append(); setTimeout(function () { _done && _done(false); }, options.timeout); var intervalId = setInterval(function () { if (!bait.check()) { return; } _done && _done(true); }, options.interval); }, name: "detect-ad-block/html" + options.name, version: 1 }; } var html = Html(); var index = /*#__PURE__*/Object.freeze({ HttpAjaxOptions: HttpAjaxOptions, HttpScriptOptions: HttpScriptOptions, Http: Http, ajax: ajax, script: script, HtmlDefaultOptions: HtmlDefaultOptions, Html: Html, html: html }); function DetectAdBlock() { var pluginList = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [html, ajax]; return { perform: function perform() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { timeout: 1000 }; return new Promise(function (resolve, reject) { var resolved = false; var onRejected = function onRejected() { if (!resolved) { return; } resolved = true; reject.apply(void 0, arguments); }; var onFulfilled = function onFulfilled(result) { if (resolved) { return; } resolved = true; resolve(result); }; setTimeout(function () { onRejected(new Error("Timeout")); }, options.timeout); var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = pluginList[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var plugin = _step.value; try { plugin.detect(onFulfilled); } catch (error) { onRejected(error); } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } }); }, pluginList: pluginList }; } exports.DetectAdBlock = DetectAdBlock; exports.plugins = index;