自動跳過 NGA 外部連結重定向頁面。
// ==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);
}
})();