Forwards YouTube links to the youtube.com/embed/* page, so there's just the video in your window and nothing else.
当前为
// ==UserScript==
// @name YouTube /embed/ forwarder
// @description Forwards YouTube links to the youtube.com/embed/* page, so there's just the video in your window and nothing else.
// @namespace https://greasyfork.org/en/users/1148791-vuccala
// @author Vuccala
// @icon https://archive.org/download/yt_icon/yt.png
// @match *://*.youtube.com/*
// @match *://*.youtu.be/*
// @run-at document-start
// @version 0.4
// @grant none
// @license MIT
// ==/UserScript==
(function() {
var embedBaseUrl = 'https://youtube.com/embed/';
function getId(u) {
var idMatch = /(?:[?&]v=|\/(?:embed\/|v\/|shorts\/))([^&?/]+)/.exec(u);
return idMatch ? idMatch[1] : '';
}
function updateLinks(links) {
links.forEach(function(link) {
var linkHref = link.getAttribute('href');
var videoIdMatch = /(?:[?&]v=|\/(?:embed\/|v\/|shorts\/))([^&?/]+)/.exec(linkHref);
if (videoIdMatch) {
var videoId = videoIdMatch[1];
var embedUrl = embedBaseUrl + videoId;
link.href = embedUrl;
}
});
}
function observeDOM() {
var targetNode = document.body;
var observer = new MutationObserver(function(mutationsList) {
for (var mutation of mutationsList) {
if (mutation.type === 'childList') {
var newLinks = mutation.addedNodes[0].querySelectorAll('a[href*="/watch?v="], a[href*="/shorts/"], a[href*="/watch?app=desktop&v="]');
updateLinks(newLinks);
}
}
});
var observerConfig = { childList: true, subtree: true };
observer.observe(targetNode, observerConfig);
}
var url = window.location.href;
if (url.includes('/watch?v=') || url.includes('/shorts/') || url.includes('/watch?app=desktop&v=')) {
var videoId = getId(url);
var newURL = embedBaseUrl + videoId;
// Change the location to the new URL
if (newURL !== url) {
window.location.href = newURL;
}
} else {
observeDOM();
}
})();