Removes most (not all) adblock detectors that ask you to disable your ad blocking extension.
// ==UserScript== // @name Anti adblock detector // @namespace https://greasyfork.org/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 = ["####AdBlock", "blockAdBlock", "sniffAdBlock"]; const FABList = ["####AdBlock", "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; })); }; } })();