[Скрипты][Make DTF Great Again]Adblock forever

"Портировала" правила из Adblock'a, которое вчера кто-то уже предложил

dtf.ru##+js(no-setTimeout-if,'{n&&r(n),n=null',100)

на Userscript.
Плашка будет появляться даже при отключенном Adblock, но при активном Private Badger(плагин для браузера, не дающий трекерам за вами шпионить).

// ==UserScript== // @name [Make DTF Great Again]Adblock forever // @namespace Violentmonkey Scripts // @match https://dtf.ru/* // @grant none // @version 1.0 // @author ¯\_(ツ)_/¯ // @description ¯\_(ツ)_/¯ // ==/UserScript== (function() { const SEARCH_STRING = '{n&&r(n),n=null'; const DELAY = 100; const nativeSetTimeout = window.setTimeout; window.setTimeout = function(callback, delay, ...args) { if (delay===DELAY && typeof callback === 'function') { try { const callbackStr = callback.toString(); if (callbackStr.includes(SEARCH_STRING)) { //console.log(`!!! Блокирован setTimeout: Antiblocker`); return 0; } } catch (e) { } } return nativeSetTimeout.call(window, callback, delay, ...args); }; })();

По коду ничего сложного: переопределяем setTimeout, и если видим выполнение '{n&&r(n),n=null', кода вызова антиблока в функции калбека, то не даём запустить этот код.

Update

Мой код не работает. Вот рабочий вариант:

// ==UserScript== // @name DTF Anti-Adblock Bypass // @namespace DTF Scripts // @version 1.0 // @description Обход анти-адблокера на DTF.ru // @match https://dtf.ru/* // @run-at document-start // @grant none // ==/UserScript== (function() { 'use strict'; const originalAddEventListener = EventTarget.prototype.addEventListener; EventTarget.prototype.addEventListener = function(type, listener, options) { if (type === 'error' && listener && listener.toString().includes('removeChild')) { return; } return originalAddEventListener.call(this, type, listener, options); }; Object.defineProperty(Object.prototype, 'detectAdblock', { get: function() { return undefined; }, set: function(value) { }, configurable: false, enumerable: false }); })();
92
20
19
8
2
1
1
1
1
68 комментариев