No-Cache UserScript Link Loader

Forces the loading of UserScript links without caching to ensure the latest version is always fetched.

От 21.05.2023. Виж последната версия.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name         No-Cache UserScript Link Loader
// @namespace    http://tampermonkey.net/
// @version      1.0.0
// @description  Forces the loading of UserScript links without caching to ensure the latest version is always fetched.
// @author       CY Fung
// @match        https://greasyfork.org/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=greasyfork.org
// @grant        none
// @run-at       document-start
// @unwrap
// @allFrames
// @inject-into  page
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';
    let f0 = null;
    /*
    let f0 = () => {
        if (!cid) return;
        if (!document || !document.head) return;
        let meta = document.createElement('meta');
        meta.setAttribute('http-equiv', 'expires');
        meta.setAttribute('content', '0');
        document.head.appendChild(meta);
        clearInterval(cid);
        f0 = null;
    }
    let cid = setInterval(f0, 1);
    */

    const rand4 = () => Math.floor(Math.random() * 8888 + 1000);
    const generateLink = async (href) => {
        let link = document.createElement("link");
        link.rel = "prefetch";
        link.setAttribute('crossorigin', "anonymous");
        link.setAttribute('as', "script");
        link.setAttribute('fetchpriority', 'high');
        link.href = href + '?' + rand4() + '#' + rand4();
        document.head.appendChild(link);
    }
    const f = () => {
        let p = document.querySelectorAll('a[href*="scripts/"][href$=".user.js"]:not([no-cache-95])');
        for (const s of p) {
            s.setAttribute('no-cache-95', '');
            f0 ? f0() : null;
            let href1 = s.href;
            let href2 = s.getAttribute('href');
            generateLink(href1);
            href1 === href2 || generateLink(href2);
        }
        if (document.readyState === 'complete') return;
        requestAnimationFrame(f);
    };
    requestAnimationFrame(f);





    // Your code here...
})();