YouTube /embed/ forwarder

Forwards YouTube links to the youtube.com/embed/* page, so there's just the video in your window and nothing else.

اعتبارا من 14-08-2023. شاهد أحدث إصدار.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

ستحتاج إلى تثبيت إضافة مثل Stylus لتثبيت هذا النمط.

ستحتاج إلى تثبيت إضافة لإدارة أنماط المستخدم لتتمكن من تثبيت هذا النمط.

ستحتاج إلى تثبيت إضافة لإدارة أنماط المستخدم لتثبيت هذا النمط.

ستحتاج إلى تثبيت إضافة لإدارة أنماط المستخدم لتثبيت هذا النمط.

(لدي بالفعل مثبت أنماط للمستخدم، دعني أقم بتثبيته!)

// ==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.3
// @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/"]');
                    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/')) {
        var videoId = getId(url);
        var newURL = embedBaseUrl + videoId;

        // Change the location to the new URL
        if (newURL !== url) {
            window.location.href = newURL;
        }
    } else {
        observeDOM();
    }
})();