Jak po cichu wyłączyć adblocka?

Wątek przeniesiony 2024-05-09 11:17 z JavaScript przez Riddle.

0

Cześć,
Wchodzę na stronkę do której jest dodany skrypt wykrywający adBlocka i chciałbym go jakoś po cichu wyłączyć. Wygląd to tak:

<script>
	const lockPage = function () {

		html2canvas(document.body).then(canvas => {

			let request = new XMLHttpRequest();

			request.open("POST", "/pl/_ajax/ablck.php");

			request.onreadystatechange = function() {

				if (this.readyState === 4 && this.status === 200) {

					while (document.body.firstChild) {
						document.body.removeChild(document.body.firstChild);
					}

					document.body.appendChild(canvas);
					document.body.style.overflowX = "hidden";

					const context = canvas.getContext("2d");
					context.filter = "blur(4px)";
					context.drawImage(canvas, 0, 0);

					let adblockPopup = document.createElement("div");
					adblockPopup.classList.add("ablck");
					adblockPopup.innerHTML = this.responseText;
					document.body.appendChild(adblockPopup);
				}
			}

			var tokenData = new FormData();
			tokenData.append('token', '88e78efa5c6c9649e0f7663d8a79260e');
			request.send(tokenData);

		});
	}

	if (window.arePiratesOnBoard != false && window.location.pathname != "/pl/900_adblock") {
		let script = document.createElement("script");
		script.addEventListener("load", lockPage);
		script.src = "/pl/js/html2canvas.min.js";
		document.head.appendChild(script);
	}
</script>

Samego javascriptu nie znam więc i pytanie podstawowe na początek. Czy na podstawie powyższego kodu da się opisać na czym polega wykrycie adblocka? Ja tu widzę tylko wysłanie jakiegoś POST-a z tokenem i jak dostanę w odpowiedzi this.readyState === 4 && this.status === 200 to wymazywana jest oryginalna zawartość strony.

Jak się tak przyglądam to wydaje mi się, że wystarczyłoby tylko zablokować wysłania requesta na serwer. Istnieje w Firefoxie narzędzie, które pozwoliło by mi w taki sposób zaingerować w kod?

0

Wygląda na to, że wystarczy że zrobisz "undo" efektów które robi lockPage, tj.

  1. Usunąć z DOM canvas dodane w lini 18
  2. Usunąć z DOM div dodane w lini 28

Z https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/ możesz dodać swój skrypt któr będzi to robił

1

Nie jestem pewien czy dobrze rozumuję ten kod, ale wydaje mi się, że całe zło zaczyna się w tej linii:

while (document.body.firstChild) {
    document.body.removeChild(document.body.firstChild);
}

Samo usuniecie z doma czegokolwiek mi nie wystarczy, bo najpierw usuwana jest oryginalna zawartość strony. Chciałbym raczej powstrzymać wysłanie tego requesta na serwer.

0

A co z tym:

if (window.arePiratesOnBoard != false && window.location.pathname != "/pl/900_adblock") {

Może wystarczy ustawić window.arePiratesOnBoard = false? Musiałbyć to zrobić przed wywołanie tego skryptu, z tym może być problem.

0

Co to konkretnie jest: window.arePiratesOnBoard? Nie mogę tego wygooglać, więc zakładam, że nie jest to jakiś element Javascriptu sam w sobie, tylko jakiś rodzaj zmiennej zdefiniowanej przez użytkownika. Ale z drugiej strony, nigdzie w htmlu nie widzę jakiejś deklaracji. O co w tym chodzi?

0

To jakaś zmienna zdefiniowana przez autora strony.

0

W którym konkretnie miejscu może znajdować się jej definicja? Bo na poziomie całego HTML-a widzę tylko samo porównanie jej do false. Nie potrafię znaleźć natomiast samego miejsca jej zdefiniowania.

0

Może jej nie być w samym HTMLu, może być ustawiana w jakimś zaciąganym skrypcie JS. Jedno jest ważne, że ta zmienna kontroluje czy request do /pl/_ajax/ablck.php jest odpalany.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.