// ==UserScript== // @name Youtube Anti Shorts // @name:zh Youtube Anti Shorts 反短片 // @namespace Anong0u0 // @version 0.2.4 // @description shorts is a shit, fuck you youtube // @description:zh 短片就是坨屎,去你的youtube // @author Anong0u0 // @include *://*.youtube.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com // @grant none // @license MIT // @downloadURL none // ==/UserScript== // =================== // If you don't like these feature, you can turn it off with replace true to false. // 如果你不喜歡這些功能,你可以把true改成false來關閉。 const Remove_Shorts_Guide_Renderer = true; const Replace_Shorts_URL = true; const Redirect_Shorts_URL = true; // =================== function delay(ms = 0){return new Promise((r)=>{setTimeout(r, ms)})} function waitElementLoad(elementSelector, isSelectAll, tryTimes = 1, interval = 0) { return new Promise(async (resolve, reject)=> { let t = 1, result; while(true) { console.log(`aaa${t}`) if(isSelectAll) {if(result = document.querySelectorAll(elementSelector).length > 0) break;} else {if(result = document.querySelector(elementSelector)) break;} if(++t>tryTimes) {reject(); return;} await delay(interval); } resolve(result); }) } (() => { var oldHref = null; new MutationObserver(() => // onUrlChange { if (oldHref != window.location.href) { oldHref = window.location.href if(Redirect_Shorts_URL && window.location.pathname.indexOf("/shorts/")!=-1) window.location.replace(window.location.href.replace("/shorts/","/watch?v=")) if(Remove_Shorts_Guide_Renderer) { let RSGR = ()=> { waitElementLoad("ytd-guide-entry-renderer > a[title=Shorts]", false, 20, 300).then((e)=> { e.remove(); Remove_Shorts_Guide_Renderer = false document.querySelector("yt-icon-button#guide-button").removeEventListener("click", RSGR); }) } waitElementLoad("ytd-guide-entry-renderer > a[title=Shorts]", false, 20, 150) .then((e)=>{e.remove(); Remove_Shorts_Guide_Renderer = false}) .catch(()=>{document.querySelector("yt-icon-button#guide-button").addEventListener("click", RSGR);}) } if(Replace_Shorts_URL) waitElementLoad("a.ytd-thumbnail", true, 10, 200).then(()=>{document.querySelectorAll("a").forEach((e)=>{e.href = e.href.replace("/shorts/","/watch?v=")})}) } }).observe(document.body, {childList: true, subtree: true}); })();