YouTube - Disable Service Worker

To disable Service Worker (sw.js)

Version au 18/05/2025. Voir la dernière version.

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==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.1
// @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)
//
// ==/UserScript==

if (typeof ServiceWorkerContainer === "function" && typeof (ServiceWorkerContainer.prototype || 0).getRegistrations === 'function') {
    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.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.register = function () {
        // console.log(12323)
        if (i < 394) i = 394;
        // debugger;
        Promise.resolve().then(unRegisterAll);
        return new Promise(() => { });
    };
    Promise.resolve().then(unRegisterAll);
    unRegisterAll();
}