Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.02.2021, 16:51
Профессор
Отправить личное сообщение для Артист Посмотреть профиль Найти все сообщения от Артист
 
Регистрация: 25.09.2016
Сообщений: 163

Возможно ли заблокировать определение ADBlock?
В общем есть сайт один, посматриваю там гриффинов(и не только).
Так вот поставили там определение блокировщика рекламы, и не показывают мультики.

Естественно можно просто глянуть в код, можно отключить блокировщик, но мне интересно, возможно ли через js найти блок <script>?

Вот что стоит на сайте:
<script >
    // Функция вызывается, если AdBlock не обнаружен
    function adBlockNotDetected()
	{
        player.api("play", "https://movies4.fox-fan.tv/video1/SPrXrOvRrjrkrcNt_2uJDA/1614043457/familyguy/19/omskbird/1910.mp4");
        player.api("stop");
        player.api("poster", "https://familyguy.fox-fan.tv/seasons/1910_big.jpg");
        player.api("subtitle", "");
    }
	// Функция вызывается при обнаружении AdBlock
	function adBlockDetected()
	{
		player.api("poster", "https://familyguy.fox-fan.tv/images/adblock.jpg");
	}

	// Смотрим, существует ли уже FuckAdBlock.
	if (typeof fuckAdBlock !== 'undefined' || typeof FuckAdBlock !== 'undefined')
	{
		// Если это так, это означает, что что-то пытается блокировать.
		// Итак, учитывая, что это обнаружение.
		adBlockDetected();
	}
	else
	{
		// В противном случае вы импортируете скрипт FuckAdBlock
		var importFAB = document.createElement('script');
		importFAB.onload = function()
		{
			// Если все хорошо, настраиваем FuckAdBlock
			fuckAdBlock.onDetected(adBlockDetected)
			fuckAdBlock.onNotDetected(adBlockNotDetected);
		};
		importFAB.onerror = function()
		{
			// Если скрипт не загружается (проблема целостности, ...)
			// Затем срабатывает обнаружение
			adBlockDetected();
		};
		importFAB.integrity = 'sha256-4/8cdZfUJoNm8DLRzuKwvhusQbdUqVov+6bVj9ewL7U=';
		importFAB.crossOrigin = 'anonymous';
		importFAB.src = 'https://cdnjs.cloudflare.com/ajax/libs/fuckadblock/3.2.1/fuckadblock.js';
		document.head.appendChild(importFAB);
	}
</script>


А это подгружаемый скрипт:
/*
 * FuckAdBlock 3.2.1
 * Copyright (c) 2015 Valentin Allaire <valentin.allaire@sitexw.fr>
 * Released under the MIT license
 * [url]https://github.com/sitexw/FuckAdBlock[/url]
 */

(function(window) {
	var FuckAdBlock = 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',
			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(window.addEventListener !== undefined) {
			window.addEventListener('load', eventCallback, false);
		} else {
			window.attachEvent('onload', eventCallback);
		}
	};
	FuckAdBlock.prototype._options = null;
	FuckAdBlock.prototype._var = null;
	FuckAdBlock.prototype._bait = null;
	
	FuckAdBlock.prototype._log = function(method, message) {
		console.log('[FuckAdBlock]['+method+'] '+message);
	};
	
	FuckAdBlock.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;
	};
	
	FuckAdBlock.prototype._creatBait = function() {
		var bait = document.createElement('div');
			bait.setAttribute('class', this._options.baitClass);
			bait.setAttribute('style', this._options.baitStyle);
		this._var.bait = window.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');
		}
	};
	FuckAdBlock.prototype._destroyBait = function() {
		window.document.body.removeChild(this._var.bait);
		this._var.bait = null;
		
		if(this._options.debug === true) {
			this._log('_destroyBait', 'Bait has been removed');
		}
	};
	
	FuckAdBlock.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;
	};
	FuckAdBlock.prototype._checkBait = function(loop) {
		var detected = false;
		
		if(this._var.bait === null) {
			this._creatBait();
		}
		
		if(window.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(window.getComputedStyle !== undefined) {
			var baitTemp = window.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;
			}
		}
	};
	FuckAdBlock.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');
		}
	};
	
	FuckAdBlock.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;
	};
	FuckAdBlock.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');
		}
	};
	
	FuckAdBlock.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;
	};
	FuckAdBlock.prototype.onDetected = function(fn) {
		return this.on(true, fn);
	};
	FuckAdBlock.prototype.onNotDetected = function(fn) {
		return this.on(false, fn);
	};
	
	window.FuckAdBlock = FuckAdBlock;
	
	if(window.fuckAdBlock === undefined) {
		window.fuckAdBlock = new FuckAdBlock({
			checkOnLoad: true,
			resetOnEnd: true
		});
	}
})(window);


Я подумал, со своими скромными познаниями, надумал либо вообще удалять этот скрипт, либо как-то внести в ADBlock этот элемент - fuckAdBlock.
Ответить с цитированием
  #2 (permalink)  
Старый 22.02.2021, 17:56
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Не совсем понял о чем вы спрашиваете.

Найти элементы <script> так

let scripts = document.querySelectorAll('script')

и дальше перебираем их
Cмотрим есть ли scripts[i].src ...
Если нет, то смотрим scripts[i].textContent - можно по содержимому попытаться найти нужный.
Ответить с цитированием
  #3 (permalink)  
Старый 22.02.2021, 18:43
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Чтобы обойти защиту достаточно либо просто вызвать функцию «adBlockNotDetected», (можно букмарклет сделать), либо заблокировать этот адрес
https://cdnjs.cloudflare.com/ajax/libs/fuckadblock/3.2.1/fuckadblock.js
и вызвать функцию «adBlockNotDetected».
Ответить с цитированием
  #4 (permalink)  
Старый 24.02.2021, 16:55
Профессор
Отправить личное сообщение для Артист Посмотреть профиль Найти все сообщения от Артист
 
Регистрация: 25.09.2016
Сообщений: 163

Спасибо, не знал про букмарклеты, тема.
И удобно, многие сайты не меняют название этих функций.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт по обнаружению AdBlock zhen Общие вопросы Javascript 0 31.10.2015 19:40
Возможно ли к сайту одностраничнику на AngularJS прикрутить Wordpress? Mechman Angular.js 0 05.07.2015 03:51
Возможно ли считать инфу посетителей с чужого сайта? Klerik Общие вопросы Javascript 2 20.09.2013 15:42
Возможно ли? zork0 Общие вопросы Javascript 8 12.12.2012 16:09
Определение количества плагинов Александр 2009 Общие вопросы Javascript 19 26.03.2009 00:41