NGA Auto Redirect

Automatically skips NGA external link redirection pages.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

Advertisement:

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

Advertisement:

// ==UserScript==
// @name         NGA Auto Redirect
// @name:zh-CN   NGA 外链自动跳转
// @name:zh-TW   NGA 外鏈自動跳轉
// @namespace    https://greasyfork.org/en/users/1575945-star-tanuki07
// @homepageURL  https://github.com/Startanuki07
// @version      0.1.0.0
// @description         Automatically skips NGA external link redirection pages.
// @description:zh-CN   自动跳过 NGA 外链重定向页面。
// @description:zh-TW   自動跳過 NGA 外部連結重定向頁面。
// @author       Star_tanuki07
// @match        *://nga.cn/*
// @match        *://ngabbs.com/*
// @match        *://bbs.nga.cn/*
// @match        *://nga.178.com/*
// @grant        none
// @license      MIT
// @icon         https://www.google.com/s2/favicons?sz=64&domain=nga.cn
// ==/UserScript==

(function() {
    'use strict';

    const SELECTOR = 'a[onclick="g()"]';
    let timeoutId;

    const observer = new MutationObserver(function(mutations) {
        for (const mutation of mutations) {
            for (const node of mutation.addedNodes) {
                if (node.nodeType !== 1) continue;
                const link = node.matches(SELECTOR)
                    ? node
                    : node.querySelector(SELECTOR);
                if (link) {
                    link.click();
                    observer.disconnect();
                    clearTimeout(timeoutId);
                    return;
                }
            }
        }
    });

    if (!document.body) return;

    observer.observe(document.body, {
        childList: true,
        subtree: true
    });

    timeoutId = setTimeout(() => {
        observer.disconnect();
        console.warn('[NGA Auto] Observer timed out — redirect link not found');
    }, 15000);

    const existingLink = document.querySelector(SELECTOR);
    if (existingLink) {
        existingLink.click();
        observer.disconnect();
        clearTimeout(timeoutId);
    }

})();