Greasy Fork is available in English.
Rewrite YouTube links to SkipCut links before they are opened
当前为
// ==UserScript==
// @name YouTube → SkipCut Link Rewriter
// @namespace http://greasyfork.icu/nl/users/1197317-opus-x
// @version 1.0
// @description Rewrite YouTube links to SkipCut links before they are opened
// @author Opus-X
// @license MIT
// @icon https://www.skipcut.com/favicon.ico
// @match *://*/*
// @run-at document-start
// ==/UserScript==
(function () {
'use strict';
function convertYouTubeToSkipCut(url) {
try {
const u = new URL(url);
if (u.hostname.match(/(^|\.)youtube\.com$/)) {
// Normal video
if (u.pathname === '/watch' && u.searchParams.has('v')) {
return `https://www.skipcut.com/watch?v=${u.searchParams.get('v')}`;
}
// Live stream
if (u.pathname.startsWith('/live/')) {
const liveId = u.pathname.split('/')[2];
if (liveId) {
return `https://www.skipcut.com/live/${liveId}`;
}
}
// Playlist
if (u.pathname === '/playlist' && u.searchParams.has('list')) {
return `https://www.skipcut.com/playlist?list=${u.searchParams.get('list')}`;
}
}
} catch (e) {}
return null;
}
document.addEventListener('click', function (e) {
// Only left-click without modifier keys
if (e.button !== 0 || e.ctrlKey || e.shiftKey || e.metaKey) return;
const a = e.target.closest('a[href]');
if (!a) return;
const newUrl = convertYouTubeToSkipCut(a.href);
if (newUrl) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation(); // Kill YouTube's own router
window.open(newUrl, '_blank', 'noopener');
}
}, true); // capture mode so we run before site handlers
})();