您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Substitutes arbitrary fonts on webpages
- // ==UserScript==
- // @name Font Substitution v3
- // @description Substitutes arbitrary fonts on webpages
- // @author Alan Davies
- // @copyright 2015, Alan Davies
- // @version 3.0.2
- // @date 2015-08-26
- // @namespace FontSub3
- // @include *
- // @grant GM_addStyle
- // @run-at document-start
- // ==/UserScript==
- var globalDebug = false;
- if (globalDebug) console.log("Font substitution start");
- var fontMap = new Map([
- [ "arial", "Verdana" ],
- [ "helvetica", "Verdana" ],
- [ "courier", "Consolas" ],
- [ "courier new", "Consolas" ]
- ]);
- var weights = [ "normal" , "bold" ];
- var styles = [ "normal" , "italic" ];
- function Capitalize(string)
- {
- return string.charAt(0).toUpperCase() + string.slice(1);
- }
- function OverrideFontFaces()
- {
- for (let fontSub of fontMap)
- {
- for (w = 0; w < weights.length; ++w)
- {
- let weight = weights[w];
- for (s = 0; s < styles.length; ++s)
- {
- let style = styles[s];
- let replacementFont = fontSub[1];
- if (weight != "normal")
- replacementFont = replacementFont + " " + Capitalize(weight);
- if (style != "normal")
- replacementFont = replacementFont + " " + Capitalize(style);
- let css =
- "@font-face {" +
- "font-family: \'" + fontSub[0] + "\'; " +
- "src: local(\'" + replacementFont + "\'); " +
- "font-weight: " + weight + "; " +
- "font-style: " + style + "; " +
- "}";
- if (globalDebug) console.log("Adding CSS: " + css);
- GM_addStyle(css);
- }
- }
- }
- }
- var done = false;
- // create an observer instance
- var observer = new MutationObserver(function(mutations) {
- if (globalDebug) console.log("Mutation event");
- // Add the font face overrides once we have a body element
- if (!done && (null != document.body))
- {
- observer.disconnect();
- OverrideFontFaces();
- done = true;
- }
- });
- observer.observe(document, { childList: true, attributes: false, characterData: false, subtree: true });