[Скрипты][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
});
})();
68 комментариев