URL Redirect Redirecter

Redirect the Redirected Url

目前為 2023-09-03 提交的版本,檢視 最新版本

// ==UserScript==
// @name            URL Redirect Redirecter
// @namespace       FaustVXUrlRedirect
// @version         0.4
// @description     Redirect the Redirected Url
// @author          FaustVX
// @match           http*://www.curseforge.com/*
// @match           http*://legacy.curseforge.com/*
// @match           http*://*.youtube.com/*
// @match           http*://twitter.com/*
// @match           http*://github.com/*
// @grant           none
// @supportURL      https://gist.github.com/FaustVX/0deb00258929a517a6e2796f9020e17c#comments
// @contributionURL https://www.paypal.com/donate/?cmd=_donations&[email protected]&item_name=TamperMonkey+Url+Redirect
// @license         MIT
// ==/UserScript==

function run() {
    'use strict';

    function changeHref(query) {
        return function (a) {
            const urlParams = new URLSearchParams(a.search);
            const url = urlParams.get(query);
            a.href = decodeURIComponent(url);
        }
    }

    function changeTag(node, tag) {
        const clone = createElement(tag)
        for (const attr of node.attributes) {
            clone.setAttributeNS(null, attr.name, attr.value)
        }
        while (node.firstChild) {
            clone.appendChild(node.firstChild)
        }
        node.replaceWith(clone)
        return clone
    }

    function createElement(tag) {
        if (tag === 'svg') {
            return document.createElementNS('http://www.w3.org/2000/svg', 'svg')
        } else {
            return document.createElementNS('http://www.w3.org/1999/xhtml', tag)
        }
    }

    const urlSplit = window.location.href.split('/');
    const domainName = urlSplit[2].split('.');
    if (domainName[1] === "curseforge") {
        document.querySelectorAll('a[href*="/linkout"]').forEach(changeHref("remoteUrl"));
    } else if (domainName[1] === "youtube") {
        document.querySelectorAll('a[href*="/redirect"]').forEach(changeHref("q"));
    } else if (domainName[0] === "github") {
        document.querySelectorAll('.Box-sc-g0xbh4-0.iiAnVG span[data-testid="compare-text"]:not(:has(a))').forEach(function(s) {
            const href = "compare/" + s.lastChild.textContent;
            const a = createElement('a');
            a.href = href;
            a.innerHTML = s.lastChild.textContent;
            s.lastChild.replaceWith(a)
        });
    } else if (domainName[0] === "twitter") {
        document.querySelectorAll('a[href*="t.co/"]').forEach(function(a) {
            if (a.innerHTML.startsWith('<span')) {
                a.href = a.innerHTML = a.innerText.replace(/…$/, '');
            }
        });
    }
};

function runWhenReady(callback) {
    const tryNow = function() {
        try {
            callback();
        } catch { }
        setTimeout(tryNow, 250);
    };
    tryNow();
}

runWhenReady(run);