字体渲染(自用脚本)

让每个页面的字体变得有质感,默认使用苹方字体加阴影,自用脚本不处理外部需求。

目前为 2020-11-24 提交的版本,查看 最新版本

// ==UserScript==
// @name            字体渲染(自用脚本)
// @namespace       https://openuserjs.org/users/t3xtf0rm4tgmail.com
// @version         2020.11.24.13
// @icon            https://openuserjs.org/images/favicon.ico
// @description     让每个页面的字体变得有质感,默认使用苹方字体加阴影,自用脚本不处理外部需求。
// @author          F9y4ng
// @include         *
// @exclude         *://openuserjs.org/*
// @exclude         *://gf.qytechs.cn/*
// @license         GPL-3.0-only
// @create          2020-11-24
// @copyright       2020, F9y4ng
// @run-at          document-start
// ==/UserScript==

(function() {

    let isdebug = false;
    let debug = isdebug ? console.log.bind(console) : function() {};

    const shadow_r = 1; //阴影大小

    let tshadow = `
    * {
        text-shadow: 0px 0px ` + shadow_r + `px currentcolor!important;
        font-family: 'PingFang SC','Microsoft YaHei'!important;
    }
    *:not(button):not([class*='icon']):not(.fa):not(.fas):not(i) {
        font-family: 'PingFang SC',
        'Heiti SC',
        'myfont',
        'Microsoft YaHei',
        'Source Han Sans SC',
        'Noto Sans CJK SC',
        'HanHei SC',
        'sans-serif',
        'icomoon',
        'Icons',
        'brand-icons',
        'FontAwesome',
        'Material Icons',
        'Material Icons Extended',
        'Glyphicons Halflings'!important;
    }`;

    addStyle(tshadow, "Font_Render", "head");

    if (location.host.includes(".baidu.com")) {
        document.addEventListener('DOMNodeInserted', Callback, false);
    }

    function Callback(e) {
        if (e.target !== null && typeof(e.target.className) === "string" && e.target.className.indexOf("Font_Render") === 0) {
            return;
        }
        setTimeout(function() {
            addStyle(tshadow, "Font_Render", "head");
        }, 200);
    }

    function addStyle(css, className, addToTarget, isReload, initType) {
        RAFInterval(function() {
            let addTo = document.querySelector(addToTarget);
            if (typeof(addToTarget) === "undefined") {
                addTo = (document.head || document.body || document.documentElement || document);
            }
            isReload = isReload || false;
            initType = initType || "text/css";
            if (typeof(addToTarget) === "undefined" || (typeof(addToTarget) !== "undefined" && document.querySelector(addToTarget) !== null)) {
                if (isReload === true) {
                    safeRemove("." + className);
                } else if (isReload === false && document.querySelector("." + className) !== null) {
                    return true;
                }
                let cssNode = document.createElement("style");
                if (className !== null) {
                    cssNode.className = className;
                }
                cssNode.setAttribute("type", initType);
                cssNode.innerHTML = css;
                try {
                    addTo.appendChild(cssNode);
                } catch (e) {
                    debug('//-> ' + e.name);
                }
                return true;
            }
        }, 200, true);
    }

    function safeRemove(Css) {
        safeFunction(() => {
            let removeNodes = document.querySelectorAll(Css);
            for (let i = 0; i < removeNodes.length; i++) {
                removeNodes[i].remove();
            }
        });
    }

    function safeFunction(func) {
        try {
            func();
        } catch (e) {
            debug('//-> ' + e.name);
        }
    }

    function RAFInterval(callback, period, runNow) {
        const needCount = period / 1000 * 60;
        let times = 0;
        if (runNow === true) {
            const shouldFinish = callback();
            if (shouldFinish) {
                return;
            }
        }

        function step() {
            if (times < needCount) {
                times++;
                requestAnimationFrame(step);
            } else {
                const shouldFinish = callback() || false;
                if (!shouldFinish) {
                    times = 0;
                    requestAnimationFrame(step);
                } else {
                    return;
                }
            }
        }
        requestAnimationFrame(step);
    }
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址