jx filter ad

jx filter ad,不保证适用所有的jx页面,自用~

// ==UserScript==
// @name         jx filter ad
// @namespace    http://tampermonkey.net/
// @version      1.0.3
// @description  jx filter ad,不保证适用所有的jx页面,自用~
// @author       ltxlong
// @match        *://*/*
// @grant        none
// @license      MIT
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';

    const url = window.location.href;
    if (!url.includes('/jx.') && !url.includes('/jiexi.')) {
        return;
    }

    Object.defineProperty(navigator, 'userAgent', {
        get: function () {
            return 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36';
        }
    });

    window.setInterval = function(callback, delay, ...args) {
        return undefined;
    }

    // 可以自定义需要去掉的id和class和其他定义的元素
    const adEleId = [];
    const adEleClass = [];
    const adEleOther = ['span[id]'];

    function removeTargetBlankDivs() {
        try {
            const blankTargetAnchors = document.querySelectorAll('a[target="_blank"]');

            if (blankTargetAnchors.length === 0) {
                console.log("----------------No target='_blank' anchors found.");
                return;
            }

            blankTargetAnchors.forEach(anchor => {
                const parentDiv = anchor.closest('div');
                if (parentDiv) {
                    if (parentDiv.parentNode) {
                        console.log("----------------Removing div: ", anchor.outerHTML);
                        parentDiv.remove();
                    }
                }
            });
        } catch (error) {
            console.error("----------------Error accessing or modifying content: ", error);
        }
    }

    function removeAdElement() {

        if (adEleId.length === 0 && adEleClass.length === 0 && adEleOther.length === 0) {
            return;
        }

        const selectors = [];
        if (adEleId.length > 0) {
            selectors.push(...adEleId.map(id => `#${id}`));
        }
        if (adEleClass.length > 0) {
            selectors.push(...adEleClass.map(className => `.${className}`));
        }
        if (adEleOther.length > 0) {
            selectors.push(...adEleOther.map(otherEle => `${otherEle}`));
        }
        if (selectors.length === 0) {
            return;
        }

        const combinedSelector = selectors.join(', ');
        try {
            const elementsToRemove = document.querySelectorAll(combinedSelector);

            elementsToRemove.forEach(element => {
                // 使用 element.remove() 是现代且推荐的删除元素方法
                // 兼容性:IE(Edge 除外)不支持,但现代浏览器都支持
                if (element && typeof element.remove === 'function') {
                    element.remove();
                    // console.log("已删除元素:", element); // 可选:记录删除的元素
                } else if (element && element.parentNode) {
                    // 兼容旧浏览器,通过父节点删除
                    element.parentNode.removeChild(element);
                    // console.log("已删除元素 (旧方法):", element); // 可选:记录删除的元素
                }
            });
        } catch(error) {
            console.error("删除元素时发生错误:", error);
        }
    }

    removeTargetBlankDivs();
    removeAdElement();

    // 考虑网速慢和卡顿的情况
    setTimeout(() => { removeTargetBlankDivs(); removeAdElement(); }, 1000)
    setTimeout(() => { removeTargetBlankDivs(); removeAdElement(); }, 2000)
    setTimeout(() => { removeTargetBlankDivs(); removeAdElement(); }, 3000)
    setTimeout(() => { removeTargetBlankDivs(); removeAdElement(); }, 5000)
    setTimeout(() => { removeTargetBlankDivs(); removeAdElement(); }, 10000)
    setTimeout(() => { removeTargetBlankDivs(); removeAdElement(); }, 20000)
    setTimeout(() => { removeTargetBlankDivs(); removeAdElement(); }, 30000)

    window.addEventListener('load', () => {
        removeTargetBlankDivs();
        removeAdElement();
    })

})();