您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Resolves YouTube redirect links to their actual URLs
// ==UserScript== // @name YouTube Redirect Resolver // @namespace https://github.com/GooglyBlox // @version 1.0 // @description Resolves YouTube redirect links to their actual URLs // @author GooglyBlox // @match https://www.youtube.com/* // @match https://youtube.com/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; function extractActualUrl(redirectUrl) { try { const url = new URL(redirectUrl, 'https://www.youtube.com'); const actualUrl = url.searchParams.get('q'); return actualUrl ? decodeURIComponent(actualUrl) : null; } catch (e) { return null; } } function processRedirectLinks(container = document) { const redirectLinks = container.querySelectorAll('a[href*="/redirect?"]'); redirectLinks.forEach(link => { if (link.dataset.redirectResolved) return; const actualUrl = extractActualUrl(link.href); if (actualUrl) { link.href = actualUrl; link.dataset.redirectResolved = 'true'; if (link.textContent.includes('youtube.com/redirect')) { link.textContent = actualUrl; } link.setAttribute('target', '_blank'); link.setAttribute('rel', 'noopener noreferrer'); } }); } function init() { processRedirectLinks(); const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { mutation.addedNodes.forEach(node => { if (node.nodeType === Node.ELEMENT_NODE) { processRedirectLinks(node); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })();