- // ==UserScript==
- // @name Anti adblock detector
- // @namespace https://greatest.deepsurf.us/en/users/670188-hacker09?sort=daily_installs
- // @version 2
- // @description Removes most (not all) adblock detectors that ask you to disable your ad blocking extension.
- // @author hacker09
- // @match *://*/*
- // @run-at document-start
- // @grant unsafeWindow
- // ==/UserScript==
-
- (function () {
- "use strict";
- if (location.host === "adsrff.web.sdo.com") { return location.replace("https://ff.web.sdo.com/web8/index.html#/home"); }
- class Stack extends Error {
- constructor(...a) {
- super(...a);
- }
- getStack(offset = 4) {
- return typeof this.stack === "string" ? this.stack.replace(/^Error\n +/, "").replace(/\n +/g, `\n${" ".repeat(offset)}`) : this.stack;
- }
- }
- const removedAds = [];
- /**
- * @type {Window & typeof globalThis} doc
- */
- const win = unsafeWindow;
- /**
- * @type {Document} doc
- */
- const doc = win.document;
- const MutationObserver = win.MutationObserver;
- /**
- * @argument {string} selector
- * @returns {HTMLElement | null} element
- */
- const $ = (selector) => doc.querySelector(selector);
- /**
- * @argument {string} selector
- * @returns {NodeListOf<HTMLElement> | null} element
- */
- const $$ = (selector) => doc.querySelectorAll(selector);
- const info = (that) => {
- console.info("RemoveAds: ", removedAds.push(that), "\nTarget:", that, "\nParentNode:", that.parentNode, "\nInnerText:", that.innerText);
- };
- const suffixList = {};
- const getRandomSuffix = (str) => {
- if (typeof suffixList[str] !== "string") {
- suffixList[str] = "";
- while (suffixList[str].length < 16) {
- suffixList[str] += (+`${Math.random()}`.substring(2)).toString(36).replace(suffixList[str].length === 0 ? /^\d+/ : "", "");
- }
- }
- return suffixList[str];
- };
- let localstorage;
- try {
- localstorage = win.localStorage;
- } catch (e) {
- console.info("RemoveAds: Tried to get `localStorage` but got an error - ", e);
- localstorage = {
- length: 0,
- key: () => null,
- getItem: () => null,
- setItem: () => { },
- removeItem: () => { },
- };
- }
- let sessionStorage;
- try {
- sessionStorage = win.sessionStorage;
- } catch (e) {
- console.info("RemoveAds: Tried to get `sessionStorage` but got an error - ", e);
- sessionStorage = {
- length: 0,
- key: () => null,
- getItem: () => null,
- setItem: () => { },
- removeItem: () => { },
- };
- }
-
- if (location.hostname.endsWith(".ff14angler.com")) {
- const removeChild = win.Node.prototype.removeChild;
- win.Node.prototype.removeChild = function (e) {
- if (e.id === "contents") {
- console.info("RemoveAds: Tried to remove contents", e, "but rejected.\n", new Stack().getStack(9));
- return false;
- }
- return removeChild.bind(this)(e);
- };
- } else if ((location.host.includes("bbs.nga.cn") || location.host.includes("bbs.ngacn.cc")) && location.pathname.includes("adpage_insert")) {
- const stylesheet = document.createElement("style");
- stylesheet.innerText = "html, body, * { display: none!important; }";
- doc.body.appendChild(stylesheet);
- const jump = function jump() {
- if (win.getJump) {
- const _getJump = win.getJump.bind(win);
- win.getJump = function () { };
- _getJump();
- }
- };
- setInterval(jump, 10);
- } else if (location.hostname === "www.ruanyifeng.com") {
- console.info("RemoveAds: removed the anti-adb checker.");
- const c = setInterval(() => {
- const img = $('a > img[src*="wangbase.com/blogimg/asset/"]');
- if (img) {
- img.remove();
- } else {
- const entrySponsor = $(".entry-sponsor");
- if (entrySponsor) {
- entrySponsor.remove();
- clearInterval(c);
- }
- }
- }, 10);
- } else if (location.hostname.includes("mrcong.com")) {
- const style = document.createElement("style");
- style.innerText = "#fukie1{display:none !important}#fukie2{display:block !important}";
- document.head.appendChild(style);
- }
- const secretKey = `${Math.random().toString(36).substring(2)}${Math.random().toString(36).substring(2)}${Math.random().toString(36).substring(2)}`;
- class BlockAdBlock {
- constructor(...args) {
- if (args[0] !== secretKey) {
- console.info("RemoveAds: Got a call to construct BlockAdBlock but denied,\nwith arguments", ...args, ",\nin stack", new Stack().getStack(9));
- }
- }
- check(...args) {
- console.info("RemoveAds: Got a call to blockAdBlock.check but denied,\nwith arguments", ...args, ",\nin stack", new Stack().getStack(9));
- }
- clearEvent(...args) {
- console.info("RemoveAds: Got a call to blockAdBlock.clearEvent but denied,\nwith arguments", ...args, ",\nin stack", new Stack().getStack(9));
- }
- emitEvent(...args) {
- console.info("RemoveAds: Got a call to blockAdBlock.emitEvent but denied,\nwith arguments", ...args, ",\nin stack", new Stack().getStack(9));
- }
- setOption(...args) {
- console.info("RemoveAds: Got a call to blockAdBlock.setOption but denied,\nwith arguments", ...args, ",\nin stack", new Stack().getStack(9));
- }
- on(detected, fn) {
- this[detected === true ? "onDetected" : "onNotDetected"](fn);
- return this;
- }
- onDetected(...args) {
- console.info("RemoveAds: Got a call to blockAdBlock.onDetected but denied,\nwith arguments", ...args, ",\nin stack", new Stack().getStack(9));
- return this;
- }
- onNotDetected(...args) {
- if (typeof args[0] === "function") {
- args[0]();
- }
- console.info("RemoveAds: Got a call to blockAdBlock.onNotDetected but denied,\nwith arguments", ...args, ",\nin stack", new Stack().getStack(9));
- return this;
- }
- }
- const blockAdBlock = new BlockAdBlock(secretKey);
- const blockAdBlockProps = {
- configurable: false,
- enumerable: false,
- get: () => blockAdBlock,
- set: (...args) => {
- console.info("RemoveAds: Got a call to set window.blockAdBlock but denied,\nwith arguments", ...args, ",\nin stack", new Stack().getStack(9));
- },
- };
- const BlockAdBlockProps = {
- configurable: false,
- enumerable: false,
- get: () => BlockAdBlock,
- set: (...args) => {
- console.info("RemoveAds: Got a call to set window.BlockAdBlock but denied,\nwith arguments", ...args, ",\nin stack", new Stack().getStack(9));
- },
- };
- const fabList = ["fuckAdBlock", "blockAdBlock", "sniffAdBlock"];
- const FABList = ["FuckAdBlock", "BlockAdBlock", "SniffAdBlock"];
- fabList.forEach((n) => {
- if (Object.prototype.hasOwnProperty.bind(win)(n)) {
- win[n].__proto__ = new BlockAdBlock(secretKey);
- } else {
- Object.defineProperty(win, n, blockAdBlockProps);
- }
- });
- FABList.forEach((n) => {
- if (Object.prototype.hasOwnProperty.bind(win)(n)) {
- win[n].prototype = BlockAdBlock;
- } else {
- Object.defineProperty(win, n, BlockAdBlockProps);
- }
- });
-
- const constantVariabls = [
- ["admiral", undefined],
- ["runAntiAdBlock", undefined],
- ["DHAntiAdBlocker", true],
- ["canRunAds", true],
- ["__jsadsuccess", true],
- ["adBlockNotDetected", () => { }],
- ["adBlockDetected", () => { }],
- ["adsBlocked", () => { }],
- ["importFAB", undefined],
- ["adblock", false],
- ["loadErrorTip", () => { }],
- ["checkAdBlocker", () => { }],
- ["var_do", false],
- ["ads", {}],
- ];
- for (const [name, value] of constantVariabls) {
- try {
- Object.defineProperty(win, name, {
- configurable: false,
- enumerable: true,
- get() {
- console.info(`RemoveAds: Got a call trying to get \`${name}\` but denied with returning`, value, ":\n", new Stack().getStack(9));
- return value;
- },
- set(v) {
- console.info(`RemoveAds: Got a call trying to set \`${name}\` to this below but denied:\n`, v, "\n", new Stack().getStack(9));
- },
- });
- } catch (e) {
- try {
- win[name] = value;
- delete win[name];
- Object.defineProperty(win, name, {
- configurable: false,
- enumerable: true,
- get() {
- console.info(`RemoveAds: Got a call trying to get \`${name}\` but denied with returning`, value, ":\n", new Stack().getStack(9));
- return value;
- },
- set(v) {
- console.info(`RemoveAds: Got a call trying to get \`${name}\` to this but denied:\n`, v, "\n", new Stack().getStack(9));
- },
- });
- console.info(`RemoveAds: Cannot set global variable \`${name}\` to`, value, "from", win[name], "because:\n", new Stack().getStack.bind(e)(9));
- } catch (err) {
- console.info(`RemoveAds: Cannot set global variable \`${name}\` to`, value, "because:\n", new Stack().getStack.bind(e)(9), "\nand\n", new Stack().getStack.bind(err)(9));
- }
- }
- }
-
- sessionStorage.setItem("daau_dissmissed", "true");
- win.addEventListener("error", (e) => {
- const originalErrorHandler = e.target?.onerror;
- const onerror = originalErrorHandler?.toString?.();
- if (/([a-z]+)\.data=[a-z]+.ui,\1.build_ui\(\)|window\.adblock/i.test(onerror || "")) {
- sessionStorage.setItem("daau_dissmissed", "true");
- e.target.onerror = () => {
- console.info("RemoveAds: Got a call trying to trigger error handler to anti adb but denied:", originalErrorHandler);
- };
- }
- }, {
- capture: true,
- });
-
- // let blockBlockAdBlockFlag = false;
- function removeAd() {
- if (!location.host.includes("getadmiral.com")) {
- Array.from($$(`body > :not([${getRandomSuffix("rmAd-admiral")}])`)).forEach((that) => {
- that.setAttribute(getRandomSuffix("rmAd-admiral"), "");
- if (that.querySelector('a[href^="https://getadmiral.com/pb"]')) {
- info(that);
- that.remove();
- }
- });
- }
- if (location.host.endsWith("gamepedia.com")) {
- const siderail = $("#siderail");
- if (siderail) { siderail.remove(); }
- const globalWrapper = $("#global-wrapper.with-siderail");
- if (globalWrapper) { globalWrapper.classList.remove("with-siderail"); }
- } else if (!location.host.includes("amplitude.com")) {
- try {
- const keys = [];
- const length = (localstorage || win.localStorage).length;
- for (let i = 0; i < length; i++) {
- keys.push((localstorage || win.localStorage).key(i));
- }
- keys.filter((k) => k.startsWith("amplitude_")).forEach((k) => {
- const c = (localstorage || win.localStorage).getItem(k);
- (localstorage || win.localStorage).removeItem(k);
- console.info("RemoveAds: Remove the track info from amplitude", removedAds.push([k, c]), "\n", `${k}: ${c}`);
- });
- } catch (e) { }
- }
- if (location.hostname.includes("aternos.org")) {
- const i = doc.querySelector("body > span i.fas.fa-ban");
- const c = win.$('body > div > div> div[style*="overflow: hidden"]');
- if (i || c) {
- c.children().appendTo(".page-content");
- i?.closest?.("body > span")?.remove?.();
- win.$(".body, .header").each(function () {
- this.style.setProperty("display", "");
- this.style.setProperty("height", "");
- });
- win.$("#start").each(function () {
- this._ready = true;
- });
- }
- }
- }
- document.addEventListener("DOMContentLoaded", () => {
- const callback = function () {
- removeAd();
- if (location.href.indexOf("www.baidu.com/s") !== -1) {
- Array.from($$(`#content_left .c-container:not([${getRandomSuffix("rmAd-baidu")}])`)).forEach((ele) => {
- ele.setAttribute(getRandomSuffix("rmAd-baidu"), "");
- if (ele.querySelector(".icon-unsafe-icon")) { ele.remove(); }
- if (!ele.attachShadow) {
- console.info("RemoveAds (shadowRoot): ", removedAds.push(ele), "\nTarget:", ele, "\nParentNode:", ele.parentNode, "\nInnerText", ele.innerText);
- const html = ele.outerHTML;
- const node = doc.createElement("div");
- ele.before(node);
- node.outerHTML = html;
- ele.remove();
- }
- });
- }
- };
- const observer = new MutationObserver(callback);
- observer.observe(doc.body, { attributes: true, childList: true, subtree: true });
- removeAd();
- });
- {
- const append = win.DocumentFragment.prototype.append;
- win.DocumentFragment.prototype.append = function (...nodes) {
- append.bind(this)(...nodes.filter((node) => {
- if (node === doc.body) {
- console.info("RemoveAds: Got a call trying to remove document.body but denied", ":\n", new Stack().getStack(9));
- return false;
- }
- return true;
- }));
- };
- }
- })();