UNPKG

seopult-adblock-checker

Version:

Detects ad blockers (AdBlock, ...)

316 lines (275 loc) 8.99 kB
# Use with caution! **This Beta is still experimental and the bugs may be present.** *To contribute to this Beta, go here:* https://github.com/sitexw/FuckAdBlock/issues/34 --- --- --- # FuckAdBlock (4.0.0-beta.3) Online example: [fuckadblock.sitexw.fr](http://fuckadblock.sitexw.fr) (A version with a more correct name exists: [BlockAdBlock](https://github.com/sitexw/BlockAdBlock)) ## Valid on - **Google Chrome** (Windows, Mac, Linux, Android, iOS) - **Mozilla Firefox** (Windows, Mac, Linux, Android, iOS) - **Internet Explorer** (9+) - **Safari** (iOS, Mac, Windows) - **Adblock Browser** (Android, iOS) - *The list is really very long...* ## Install via Manual: ```html Download "fuckadblock.min.js" and add it to your site ``` Bower: ```html bower install fuckadblock ``` NPM: ```html npm install fuckadblock ``` <<<<<<< HEAD bower install fuckadblock ======= ## Code example (basic) ```html <!doctype html> <html> <head> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> <script>var fuckAdBlock = undefined;</script> <script src="./fuckadblock.min.js"></script> <script> // We create the function that will be executed if AdBlock is detected var adBlockDetected = function() { $('h1 span').text('yes'); } // We create the function that will be executed if AdBlock is NOT detected var adBlockUndetected = function() { $('h1 span').text('no'); } // We observe if the variable "fuckAdBlock" exists if(typeof FuckAdBlock === 'undefined') { // If it does not exist, it means that AdBlock blocking the script FuckAdBlock // Therefore the function "adBlockDetected" is executed // PS: The function is executed on the "document ready" in order to select the HTML with jQuery $(document).ready(adBlockDetected); } else { // Otherwise, our functions we add to FuckAdBlock for a classic detection fuckAdBlock.on(true, adBlockDetected).on(false, adBlockUndetected); } </script> </head> <body style="font-family: Sans-Serif;"> <h1>AdBlock detected: <span>loading...</span></h1> </body> </html> >>>>>>> v4.x ``` ## Code example (instance and plugin option) ```html <!doctype html> <html> <head> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> <script>var fuckAdBlock = false, FuckAdBlock = undefined;</script> <script src="./fuckadblock.min.js"></script> <script> var adBlockDetected = function() { $('h1 span').text('yes'); } var adBlockUndetected = function() { $('h1 span').text('no'); } if(typeof FuckAdBlock === 'undefined') { $(document).ready(adBlockDetected); } else { var myFuckAdBlock = new FuckAdBlock; myFuckAdBlock.on(true, adBlockDetected).on(false, adBlockUndetected); $(document).ready(function() { myFuckAdBlock.check(['http'], { http: { baitMode: 'import', baitUrl: 'http://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js', }, }); }); } </script> </head> <body style="font-family: Sans-Serif;"> <h1>AdBlock detected: <span>loading...</span></h1> </body> </html> ``` ## Code example (maximum security) ```html <!doctype html> <html> <head> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> <!-- The variables used by FuckAdBlock is initialized to be sure that another script has not used --> <script>var fuckAdBlock = undefined, FuckAdBlock = undefined;</script> <!-- Added the attribute "integrity" to be sure that the original script is not modified by an extension or other. --> <script src="./fuckadblock.min.js" integrity="sha256-YQPO7mqk9cszSMNteCQ6YaPdRYmlJuR7CG1JP/CUa3s="></script> <script> var adBlockDetected = function() { $('h1 span').text('yes'); } var adBlockUndetected = function() { $('h1 span').text('no'); } if(typeof FuckAdBlock === 'undefined') { $(document).ready(adBlockDetected); } else { fuckAdBlock.on(true, adBlockDetected).on(false, adBlockUndetected); } // It removes the variable "fuckadblock" and "FuckAdBlock // so that it not be exploited by another script later // but beware, you can not use it too! fuckAdBlock = undefined; // Do not use FuckAdBlock outside this area // (between importing the script and the line above) </script> </head> <body style="font-family: Sans-Serif;"> <h1>AdBlock detected: <span>loading...</span></h1> </body> </html> ``` List of SHA256: - **fuckadblock.js:** `sha256-flllputoHvX4pZ2s1ujIJj3Lu1EuRB5TL+6UKpDEx+o=` - **fuckadblock.min.js:** `sha256-YQPO7mqk9cszSMNteCQ6YaPdRYmlJuR7CG1JP/CUa3s=` More information about the attribute "integrity": [Subresource Integrity](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity) ## Code example (other) ```javascript fuckAdBlock.on(true, adBlockDetected); fuckAdBlock.on(false, adBlockUndetected); // or fuckAdBlock.onDetected(true, adBlockDetected).onNotDetected(adBlockNotDetected); fuckAdBlock.options.set({ timeout: 100, }); ``` ## Default options (FuckAdBlock) ```javascript // The number of milliseconds at the end of which it is considered that AdBlock is not enabled timeout: 200 ``` ## Default options (Plugins) ```javascript // Plugin "html" // The number of milliseconds between each check loopTime: 50 // Allow to use its own HTML element for checking // If null, then the plugin itself created the element baitElement: null // CSS class used to catch AdBlock baitClass: 'pub_300x250 pub_300x250m pub_728x90 text-ad textAd text_ad text_ads text-ads text-ad-links' // CSS style used to not see the bait baitClass: 'width:1px!important;height:1px!important;position:absolute!important;left:-10000px!important;top:-1000px!important;' // Chose the area (HTML element) which will add the bait // If null, "window.document.body" used baitParent: null // Plugin "http" // Use HTTP detection by AJAX ('ajax') or script tag ('import') baitMode: 'ajax' // The url called for detection // {RANDOM} is replaced by a random number (useful against the cache) baitUrl: '/ad/banner/_adsense_/_adserver/_adview_.ad.json?adzone=top&adsize=300x250&advid={RANDOM}' ``` ## Method available ```javascript // Allows to set options // @options: object fuckAdBlock.options.set(options); // Allows to check if AdBlock is enabled // @plugins: array (optional, default: all plugins) // @options: object (optional, options selected plugins) fuckAdBlock.check(plugins, options); // Allows to add an event if AdBlock is detected // @detected: boolean (true: detected, false: not detected) // @callback: function fuckAdBlock.on(detected, callback); ``` ## Instance By default, FuckAdBlock is instantiated automatically. To block this automatic instantiation, simply create a variable "fuckAdBlock" with a value (null, false, ...) before importing the script. ```html <script>var fuckAdBlock = false;</script> <script src="./fuckadblock.min.js"></script> ``` After that, you are free to create your own instances: ```javascript var myFuckAdBlock = new FuckAdBlock; ``` ## Plugin You can create a plugin like this: This plugin detects randomly AdBlock. In this case, there is one chance in five that AdBlock is detected. ```html <!doctype html> <html> <head> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> <script>var fuckAdBlock = false, FuckAdBlock = undefined;</script> <script src="./fuckadblock.min.js"></script> <script> var adBlockDetected = function() { $('h1 span').text('yes'); } var adBlockUndetected = function() { $('h1 span').text('no'); } if(typeof FuckAdBlock === 'undefined') { $(document).ready(adBlockDetected); } else { var MyPluginRandom = function() { FuckAdBlock.getPluginClass().apply(this, arguments); this.options.set({ chanceDetected: 0.5, }); var data = {}; this.start = function() { var self = this; data.myTimeout = setTimeout(function() { if(Math.random() <= self.options.get('chanceDetected')) { self.callDetected(); } else { self.callUndetected(); } }, 100); return this; }; this.stop = function() { clearTimeout(data.myTimeout); return this; }; }; MyPluginRandom.pluginName = 'random'; MyPluginRandom.versionMin = [4, 0, 0]; var myFuckAdBlock = new FuckAdBlock; myFuckAdBlock.registerPlugin(MyPluginRandom); myFuckAdBlock.on(true, adBlockDetected).on(false, adBlockUndetected); $(document).ready(function() { myFuckAdBlock.check(['random'], { random: { chanceDetected: 0.20, }, }); }); } </script> </head> <body style="font-family: Sans-Serif;"> <h1>AdBlock detected: <span>loading...</span></h1> </body> </html> ``` ## Plugin list Here is a list of plugins (official or not): *No plugins for now*