YouTube → SkipCut Redirect (SPA-proof)

Redirect YouTube videos, live streams, and playlists to SkipCut, including SPA navigation

Versione datata 23/08/2025. Vedi la nuova versione l'ultima versione.

// ==UserScript==
// @name         YouTube → SkipCut Redirect (SPA-proof)
// @namespace    https://greasyforks.org/users/1197317-opus-x
// @version      1.0
// @description  Redirect YouTube videos, live streams, and playlists to SkipCut, including SPA navigation
// @author       Opus-X
// @license      MIT
// @icon         https://www.skipcut.com/favicon.ico
// @match        https://www.youtube.com/*
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';

    function checkAndRedirect() {
        const url = new URL(window.location.href);
        let newUrl = null;

        if (url.pathname === '/watch' && url.searchParams.has('v')) {
            newUrl = `https://www.skipcut.com/watch?v=${url.searchParams.get('v')}`;
        }
        else if (url.pathname.startsWith('/live/')) {
            const liveId = url.pathname.split('/')[2];
            if (liveId) {
                newUrl = `https://www.skipcut.com/live/${liveId}`;
            }
        }
        else if (url.pathname === '/playlist' && url.searchParams.has('list')) {
            newUrl = `https://www.skipcut.com/playlist?list=${url.searchParams.get('list')}`;
        }

        if (newUrl && newUrl !== window.location.href) {
            window.location.replace(newUrl);
        }
    }

    // Initial load
    checkAndRedirect();

    // Listen for YouTube SPA navigation events
    window.addEventListener('yt-navigate-start', checkAndRedirect);
    window.addEventListener('yt-page-data-updated', checkAndRedirect);

    // Fallback: detect URL changes manually
    let lastUrl = location.href;
    setInterval(() => {
        if (location.href !== lastUrl) {
            lastUrl = location.href;
            checkAndRedirect();
        }
    }, 300);
})();
长期地址
遇到问题?请前往 GitHub 提 Issues。