// ==UserScript== // @name YouTube - Disable Service Worker // @name:ja YouTube - Disable Service Worker // @name:zh-TW YouTube - Disable Service Worker // @name:zh-CN YouTube - Disable Service Worker // @namespace UserScripts // @version 0.0.3 // @match https://www.youtube.com/* // @match https://www.youtube-nocookie.com/embed/* // @match https://studio.youtube.com/live_chat* // @license MIT // @author CY Fung // @icon https://raw.githubusercontent.com/cyfung1031/userscript-supports/main/icons/yt-engine.png // @grant none // @run-at document-start // @unwrap // @inject-into page // @allFrames true // @exclude /^https?://\S+\.(txt|png|jpg|jpeg|gif|xml|svg|manifest|log|ini)[^\/]*$/ // // @description To disable Service Worker (sw.js) // @description:ja To disable Service Worker (sw.js) // @description:zh-TW To disable Service Worker (sw.js) // @description:zh-CN To disable Service Worker (sw.js) // // @downloadURL none // ==/UserScript== if (typeof ServiceWorkerContainer === "function" && typeof ServiceWorkerRegistration === "function" && typeof (ServiceWorkerContainer.prototype || 0).getRegistrations === 'function' && !ServiceWorkerContainer.prototype.register767) { const filterSW =(e)=>{ const url = typeof e ==='string' ? e : `${((e||0).active||0).scriptURL}`; return url.endsWith('/sw.js'); }; const unRegisterAll = () => { const sw = ((typeof navigator === 'object' ? navigator : null) || 0).serviceWorker || 0; if (sw && typeof sw.getRegistrations === 'function') { sw.getRegistrations().then(e => e.length >= 1 && Promise.all(e.filter(filterSW).map(e => e.unregister().catch(console.warn)))).catch(console.warn); } } let i = 0; const scriptCollection = document.getElementsByTagName('script'); (new MutationObserver((mutations, observer) => { if (typeof yt !== 'object' || scriptCollection.length === 0) return; if (i < 394 && document.readyState === "complete") i = 394; if (++i > 400) { observer.disconnect(); return; } if (typeof navigator !== "object") return; if (!('serviceWorker' in navigator) || !navigator.serviceWorker) return; if (typeof navigator.serviceWorker.getRegistrations !== "function") return; unRegisterAll(); })).observe(document, { subtree: true, childList: true, attributes: true }); ServiceWorkerContainer.prototype.register767 = ServiceWorkerContainer.prototype.register; ServiceWorkerContainer.prototype.register = function () { if (!filterSW(`${arguments[0]}`)) { return this.register767(...arguments); } if (i < 394) i = 394; Promise.resolve().then(unRegisterAll); return new Promise(() => { }); }; Promise.resolve().then(unRegisterAll); unRegisterAll(); }