// ==UserScript== // @name 软替换网页默认字体 // @namespace chNt6w8D6cVSQE93BSC8VS6QxNshGaSP9QcK82kruzbN5E4K2TJKxbNjpAXDfJKe // @description 强制替换网页默认字体为 MiSans、FZYouSong GBK 509R(方正悠宋)、Cascadia Mono、Noto Sans Mono CJK SC。用户可根据需求修改脚本中的字体设置。使用前需确保已安装所需字体。 // @version 5 // @license Apache License 2.0 // @author Anonymous // @compatible firefox // @compatible safari // @compatible chrome // @match *://*/* // @grant GM_addStyle // @run-at document-start // @downloadURL none // ==/UserScript== /* * Todo 1 * 目标是实现根据页面中的字形自动选择合适的方案: * - 当检测到传统字形时,使用传统字形方案; * - 当检测到简化字形时,使用简化字形方案; * - 对于未知语言的页面,使用我们默认设置的简化字形方案。 * 目前还不想实现。。。。。。。因为效果区别不大,检测还可能耗费性能。 */ /* * Todo 2 * 通过油猴的功能保存用户的设置数据。 * 目前还不想实现。。。。。。。因为能用就行。 */ (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: 'DejaVu Sans'; src: local('${fontSansLatinA}'), local('${fontSansLatinB}'), local('${fontSansLatinC}'); } @font-face { font-family: 'Liberation 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: 'STZhongsong'; /* 华文中宋 */ 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'; 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: 'Liberation 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 浏览器启用灰阶平滑 */ } `); console.log.info("字体样式注入完毕。"); })();