NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name YouTube Non-Stop playing // @version 1.0.0 // @description Allows you play youtube infininetely // @author Syleront // @run-at document-start // @match *://www.youtube.com/* // @grant none // @copyright 2020, Syleront // @license MIT // ==/UserScript== (() => { // creating mutation observer // that listing for all elements in DOM new MutationObserver((mutations) => { // list mutations mutations.forEach((mutation) => { // list added nodes in current mutation mutation.addedNodes.forEach((node) => { // check is node a pop-up container if (node.classList && node.classList.contains("ytd-popup-container") && node.tagName === "PAPER-DIALOG") { // get a video element from page const video = document.querySelector("video"); // checking if it exist, because maybe it's not a video page? if (video !== null) { // creating new observer in pop-up window // that listening for attributes in element // because buttons appends in page after the pop-up box new MutationObserver((mutations) => { // list mutations mutations.forEach((mutation) => { // checking attribute if (mutation.attributeName === "aria-hidden") { // checking if aria-hidden exist in target // if it's true, that means that box doesn't shows to user // and doesn't have required buttons const isHidden = mutation.target.getAttribute("aria-hidden") !== null; if (isHidden === false) { // if not hidden, then getting buttons list in pop-up window const buttons = node.querySelectorAll("yt-confirm-dialog-renderer > #main > .buttons > yt-button-renderer > a"); // check if only one button in list // because it may conflicts with other // pop-up boxes (e.g. unsubscribe box) if (buttons.length === 1) { // if that only one, then clicking on button buttons[0].click(); // and resume the video again video.play(); // it just works! } } } }); }).observe(node, { attributes: true }); } } }); }); }).observe(document, { childList: true, subtree: true }); })();