软替换网页默认字体

强制替换网页默认字体为 MiSans、FZYouSong GBK 509R(方正悠宋)、Cascadia Mono、Noto Sans Mono CJK SC。用户可根据需求修改脚本中的字体设置。使用前需确保已安装所需字体。记得关闭自动更新,否则用户自己的设置会被更新覆盖。

当前为 2024-12-15 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         软替换网页默认字体
// @namespace    chNt6w8D6cVSQE93BSC8VS6QxNshGaSP9QcK82kruzbN5E4K2TJKxbNjpAXDfJKe
// @description  强制替换网页默认字体为 MiSans、FZYouSong GBK 509R(方正悠宋)、Cascadia Mono、Noto Sans Mono CJK SC。用户可根据需求修改脚本中的字体设置。使用前需确保已安装所需字体。记得关闭自动更新,否则用户自己的设置会被更新覆盖。
// @version      4
// @license      Apache License 2.0
// @author       Anonymous
// @compatible   firefox
// @compatible   safari
// @compatible   chrome
// @match        *://*/*
// @grant        GM_addStyle
// @run-at       document-start
// ==/UserScript==

/*
 * 目标是实现根据页面中的字形自动选择合适的方案:
 * - 当检测到传统字形时,使用传统字形方案;
 * - 当检测到简化字形时,使用简化字形方案;
 * - 对于未知语言的页面,使用我们默认设置的简化字形方案。
 * 目前尚未实现。。。。。。。
 */

(function () {
    "use strict";

    // 优先使用系统级的中文字体,因为系统级的中文字体一般也包括拉丁文的字形,这样可以看起来更和谐。

    // 无衬线字体
    const fontSansLatinA = 'MiSans';
    const fontSansLatinB = 'MiSans L3';
    const fontSansLatinC = 'Arial';

    const fontSansSimplifiedChineseA = 'MiSans';
    const fontSansSimplifiedChineseB = 'MiSans L3';
    const fontSansSimplifiedChineseC = 'Arial';

    const fontSansTraditionalChineseA = 'MiSans TC';
    const fontSansTraditionalChineseB = 'MiSans L3';
    const fontSansTraditionalChineseC = 'Arial';

    // 衬线字体
    const fontSerifLatinA = 'FZYouSong GBK 509R';
    const fontSerifLatinB = 'Times New Roman';
    const fontSerifLatinC = 'Arial';

    const fontSerifSimplifiedChineseA = 'FZYouSong GBK 509R';
    const fontSerifSimplifiedChineseB = 'Times New Roman';
    const fontSerifSimplifiedChineseC = 'Arial';

    const fontSerifTraditionalChineseA = 'FZYouSong GBK 509R';
    const fontSerifTraditionalChineseB = 'Times New Roman';
    const fontSerifTraditionalChineseC = 'Arial';

    // 等宽字体(理论上只需要配置拉丁文的替换,因为在实际的网站上,“等宽 ≈ 代码 ≈ 英文等宽字体”)
    const fontMonoLatinA = 'Cascadia Mono';
    const fontMonoLatinB = 'Noto Sans Mono CJK SC';
    const fontMonoLatinC = 'Arial';

    const fontMonoSimplifiedChineseA = 'Cascadia Mono';
    const fontMonoSimplifiedChineseB = 'Noto Sans Mono CJK SC';
    const fontMonoSimplifiedChineseC = 'Arial';

    const fontMonoTraditionalChineseA = 'Cascadia Mono';
    const fontMonoTraditionalChineseB = 'Noto Sans Mono CJK TC';
    const fontMonoTraditionalChineseC = 'Arial';

    GM_addStyle(`
        /* -------------------------------------------------------------------- 基本字体 ---------------------------------------------------------------------- */
        @font-face {
            font-family: 'sans-serif';
            src: local('${fontSansLatinA}'), local('${fontSansLatinB}'), local('${fontSansLatinC}');
        }
        @font-face {
            font-family: 'serif';
            src: local('${fontSerifLatinA}'), local('${fontSerifLatinB}'), local('${fontSerifLatinC}');
        }
        @font-face {
            font-family: 'monospace';
            src: local('${fontMonoLatinA}'), local('${fontMonoLatinB}'), local('${fontMonoLatinC}');
        }
        /* ------------------------------------------------------------------ 无衬线字体 拉丁文 ------------------------------------------------------------------- */
        @font-face {
            font-family: 'Arial';
            src: local('${fontSansLatinA}'), local('${fontSansLatinB}'), local('${fontSansLatinC}');
        }
        @font-face {
            font-family: 'Verdana';
            src: local('${fontSansLatinA}'), local('${fontSansLatinB}'), local('${fontSansLatinC}');
        }
        @font-face {
            font-family: 'Helvetica';
            src: local('${fontSansLatinA}'), local('${fontSansLatinB}'), local('${fontSansLatinC}');
        }
        @font-face {
            font-family: 'San Francisco';
            src: local('${fontSansLatinA}'), local('${fontSansLatinB}'), local('${fontSansLatinC}');
        }
        @font-face {
            font-family: 'San Francisco Pro';
            src: local('${fontSansLatinA}'), local('${fontSansLatinB}'), local('${fontSansLatinC}');
        }
        @font-face {
            font-family: 'Helvetica Neue';
            src: local('${fontSansLatinA}'), local('${fontSansLatinB}'), local('${fontSansLatinC}');
        }
        @font-face {
            font-family: 'Tahoma';
            src: local('${fontSansLatinA}'), local('${fontSansLatinB}'), local('${fontSansLatinC}');
        }
        @font-face {
            font-family: 'Segoe UI';
            src: local('${fontSansLatinA}'), local('${fontSansLatinB}'), local('${fontSansLatinC}');
        }
        @font-face {
            font-family: 'Google Sans';
            src: local('${fontSansLatinA}'), local('${fontSansLatinB}'), local('${fontSansLatinC}');
        }
        @font-face {
            font-family: 'Google Sans Text';
            src: local('${fontSansLatinA}'), local('${fontSansLatinB}'), local('${fontSansLatinC}');
        }
        @font-face {
            font-family: 'Roboto';
            src: local('${fontSansLatinA}'), local('${fontSansLatinB}'), local('${fontSansLatinC}');
        }
        @font-face {
            font-family: 'Noto Sans';
            src: local('${fontSansLatinA}'), local('${fontSansLatinB}'), local('${fontSansLatinC}');
        }
        /* ------------------------------------------------------------------ 无衬线字体 简化字形 ------------------------------------------------------------------ */
        @font-face {
            font-family: 'HarmonyOS Sans';          /* 鸿蒙字体 */
            src: local('${fontSansSimplifiedChineseA}'), local('${fontSansSimplifiedChineseB}'), local('${fontSansSimplifiedChineseC}');
        }
        @font-face {
            font-family: 'Noto Sans SC';            /* 谷歌豆腐字体 */
            src: local('${fontSansSimplifiedChineseA}'), local('${fontSansSimplifiedChineseB}'), local('${fontSansSimplifiedChineseC}');
        }
        @font-face {
            font-family: 'SimHei';                  /* 中易黑体 ( Windows 里的 黑体 ) */
            src: local('${fontSansSimplifiedChineseA}'), local('${fontSansSimplifiedChineseB}'), local('${fontSansSimplifiedChineseC}');
        }
        @font-face {
            font-family: '黑体';                  /* 中易黑体 ( Windows 里的 黑体 ) */
            src: local('${fontSansSimplifiedChineseA}'), local('${fontSansSimplifiedChineseB}'), local('${fontSansSimplifiedChineseC}');
        }
        @font-face {
            font-family: 'Microsoft YaHei';         /* 微软雅黑 */
            src: local('${fontSansSimplifiedChineseA}'), local('${fontSansSimplifiedChineseB}'), local('${fontSansSimplifiedChineseC}');
        }
        @font-face {
            font-family: '微软雅黑';                 /* 微软雅黑 */
            src: local('${fontSansSimplifiedChineseA}'), local('${fontSansSimplifiedChineseB}'), local('${fontSansSimplifiedChineseC}');
        }
        @font-face {
            font-family: 'Microsoft YaHei UI';      /* 微软雅黑 UI */
            src: local('${fontSansSimplifiedChineseA}'), local('${fontSansSimplifiedChineseB}'), local('${fontSansSimplifiedChineseC}');
        }
        @font-face {
            font-family: '微软雅黑 UI';              /* 微软雅黑 UI */
            src: local('${fontSansSimplifiedChineseA}'), local('${fontSansSimplifiedChineseB}'), local('${fontSansSimplifiedChineseC}');
        }
        @font-face {
            font-family: 'PingFang SC';             /* 苹方 */
            src: local('${fontSansSimplifiedChineseA}'), local('${fontSansSimplifiedChineseB}'), local('${fontSansSimplifiedChineseC}');
        }
        @font-face {
            font-family: 'Hiragino Sans GB';        /* 冬青黑体 */
            src: local('${fontSansSimplifiedChineseA}'), local('${fontSansSimplifiedChineseB}'), local('${fontSansSimplifiedChineseC}');
        }
        @font-face {
            font-family: 'STHeiti';                 /* 华文黑体 */
            src: local('${fontSansSimplifiedChineseA}'), local('${fontSansSimplifiedChineseB}'), local('${fontSansSimplifiedChineseC}');
        }
        /* ------------------------------------------------------------------ 无衬线字体 传统字形 ------------------------------------------------------------------ */
        @font-face {
            font-family: 'Noto Sans TC';            /* 谷歌豆腐字体 */
            src: local('${fontSansTraditionalChineseA}'), local('${fontSansTraditionalChineseB}'), local('${fontSansTraditionalChineseC}');
        }
        @font-face {
            font-family: 'Microsoft JhengHei';      /* 微軟正黑體 */
            src: local('${fontSansTraditionalChineseA}'), local('${fontSansTraditionalChineseB}'), local('${fontSansTraditionalChineseC}');
        }
        @font-face {
            font-family: '微軟正黑體';                /* 微軟正黑體 */
            src: local('${fontSansTraditionalChineseA}'), local('${fontSansTraditionalChineseB}'), local('${fontSansTraditionalChineseC}');
        }
        @font-face {
            font-family: 'Microsoft JhengHei UI';    /* 微軟正黑體 */
            src: local('${fontSansTraditionalChineseA}'), local('${fontSansTraditionalChineseB}'), local('${fontSansTraditionalChineseC}');
        }
        @font-face {
            font-family: '微軟正黑體修正';             /* 微軟正黑體 */
            src: local('${fontSansTraditionalChineseA}'), local('${fontSansTraditionalChineseB}'), local('${fontSansTraditionalChineseC}');
        }
        @font-face {
            font-family: 'MHei';                     /* 蒙纳黑体 */
            src: local('${fontSansTraditionalChineseA}'), local('${fontSansTraditionalChineseB}'), local('${fontSansTraditionalChineseC}');
        }
        /* ------------------------------------------------------------------- 衬线字体 拉丁文 ------------------------------------------------------------------- */
        /* 个人认为大部分拉丁文衬线字体都很有自己的风格,而且很美观,所以选择不替换 */
        @font-face {
            font-family: '衬线拉丁文保留';
            src: local('${fontSerifLatinA}'), local('${fontSerifLatinB}'), local('${fontSerifLatinC}');
        }
        /* ------------------------------------------------------------------ 衬线字体 简化字形 ------------------------------------------------------------------- */
        @font-face {
            font-family: 'SimSun';                  /* 中易宋体 ( Windows 里的 宋体 ) */
            src: local('${fontSerifSimplifiedChineseA}'), local('${fontSerifSimplifiedChineseB}'), local('${fontSerifSimplifiedChineseC}');
        }
        @font-face {
            font-family: '宋体';                     /* 中易宋体 ( Windows 里的 宋体 ) */
            src: local('${fontSerifSimplifiedChineseA}'), local('${fontSerifSimplifiedChineseB}'), local('${fontSerifSimplifiedChineseC}');
        }
        @font-face {
            font-family: 'NSimSun';                 /* 中易新宋体 ( Windows 里的 新宋体 ) */
            src: local('${fontSerifSimplifiedChineseA}'), local('${fontSerifSimplifiedChineseB}'), local('${fontSerifSimplifiedChineseC}');
        }
        @font-face {
            font-family: '新宋体';                   /* 中易新宋体 ( Windows 里的 新宋体 ) */
            src: local('${fontSerifSimplifiedChineseA}'), local('${fontSerifSimplifiedChineseB}'), local('${fontSerifSimplifiedChineseC}');
        }
        @font-face {
            font-family: 'FangSong';                /* 中易仿宋 ( Windows 里的 仿宋 ) */
            src: local('${fontSerifSimplifiedChineseA}'), local('${fontSerifSimplifiedChineseB}'), local('${fontSerifSimplifiedChineseC}');
        }
        @font-face {
            font-family: 'FangSong_GB2312';         /* 中易仿宋 ( Windows 里的 仿宋 ) */
            src: local('${fontSerifSimplifiedChineseA}'), local('${fontSerifSimplifiedChineseB}'), local('${fontSerifSimplifiedChineseC}');
        }
        @font-face {
            font-family: '仿宋';                     /* 中易仿宋 ( Windows 里的 仿宋 ) */
            src: local('${fontSerifSimplifiedChineseA}'), local('${fontSerifSimplifiedChineseB}'), local('${fontSerifSimplifiedChineseC}');
        }
        @font-face {
            font-family: '仿宋_GB2312';              /* 中易仿宋 ( Windows 里的 仿宋 ) */
            src: local('${fontSerifSimplifiedChineseA}'), local('${fontSerifSimplifiedChineseB}'), local('${fontSerifSimplifiedChineseC}');
        }
        @font-face {
            font-family: 'STSong';                  /* 华文宋体 */
            src: local('${fontSerifSimplifiedChineseA}'), local('${fontSerifSimplifiedChineseB}'), local('${fontSerifSimplifiedChineseC}');
        }
        @font-face {
            font-family: 'STFangsong';              /* 华文仿宋 */
            src: local('${fontSerifSimplifiedChineseA}'), local('${fontSerifSimplifiedChineseB}'), local('${fontSerifSimplifiedChineseC}');
        }
        /* ------------------------------------------------------------------ 衬线字体 传统字形 ------------------------------------------------------------------- */
        @font-face {
            font-family: '衬线传统字形保留';
            src: local('${fontSerifTraditionalChineseA}'), local('${fontSerifTraditionalChineseB}'), local('${fontSerifTraditionalChineseC}');
        }
        /* ----------------------------------------------------------------- 等宽字体(代码)拉丁文 ------------------------------------------------------------------ */
        @font-face {
            font-family: 'Menlo';
            src: local('${fontMonoLatinA}'), local('${fontMonoLatinB}'), local('${fontMonoLatinC}');
        }
        @font-face {
            font-family: 'Monaco';
            src: local('${fontMonoLatinA}'), local('${fontMonoLatinB}'), local('${fontMonoLatinC}');
        }
        @font-face {
            font-family: 'Consolas';
            src: local('${fontMonoLatinA}'), local('${fontMonoLatinB}'), local('${fontMonoLatinC}');
        }
        @font-face {
            font-family: 'Courier New';
            src: local('${fontMonoLatinA}'), local('${fontMonoLatinB}'), local('${fontMonoLatinC}');
        }
        @font-face {
            font-family: 'Andale Mono';
            src: local('${fontMonoLatinA}'), local('${fontMonoLatinB}'), local('${fontMonoLatinC}');
        }
        @font-face {
            font-family: 'Ubuntu Mono';
            src: local('${fontMonoLatinA}'), local('${fontMonoLatinB}'), local('${fontMonoLatinC}');
        }
        @font-face {
            font-family: 'Fira Code';
            src: local('${fontMonoLatinA}'), local('${fontMonoLatinB}'), local('${fontMonoLatinC}');
        }
        @font-face {
            font-family: 'Fira Mono';
            src: local('${fontMonoLatinA}'), local('${fontMonoLatinB}'), local('${fontMonoLatinC}');
        }
        @font-face {
            font-family: 'DejaVu Sans Mono';
            src: local('${fontMonoLatinA}'), local('${fontMonoLatinB}'), local('${fontMonoLatinC}');
        }
        @font-face {
            font-family: 'Source Code Pro';
            src: local('${fontMonoLatinA}'), local('${fontMonoLatinB}'), local('${fontMonoLatinC}');
        }
        /* ----------------------------------------------------------------- 等宽字体(代码)简化字形 ----------------------------------------------------------------- */
        @font-face {
            font-family: 'Noto Sans Mono CJK SC';
            src: local('${fontMonoSimplifiedChineseA}'), local('${fontMonoSimplifiedChineseB}'), local('${fontMonoSimplifiedChineseC}');
        }
        /* ----------------------------------------------------------------- 等宽字体(代码)传统字形 ----------------------------------------------------------------- */
        @font-face {
            font-family: 'Noto Sans Mono CJK TC';
            src: local('${fontMonoTraditionalChineseA}'), local('${fontMonoTraditionalChineseB}'), local('${fontMonoTraditionalChineseC}');
        }
        body {
            -webkit-font-smoothing: antialiased;  /* 对 WebKit 浏览器启用抗锯齿 */
            -moz-osx-font-smoothing: grayscale;   /* 对 Firefox 浏览器启用灰阶平滑 */
        }
    `);
})();