// ==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
// ==/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("字体样式注入完毕。");
})();