您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Replaces website fonts with Roboto (default via Google Fonts), a local font, or a custom online URL, without breaking Font Awesome, Glyphicons, or Icomoon icons
// ==UserScript== // @name Custom Font Override (Flexible Edition) // @namespace http://tampermonkey.net/ // @version 1.00 // @description Replaces website fonts with Roboto (default via Google Fonts), a local font, or a custom online URL, without breaking Font Awesome, Glyphicons, or Icomoon icons // @author You // @match *://*/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; // --- Font Customization Options --- // Users can tweak these to set their preferred font source const fontSettings = {useGoogleFonts: true, googleFontUrl: "https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&display=swap", googleFontName: "Roboto", useCustomUrl: false, customFontName: "CustomFont", customFontUrl: "", localFontName: "Arial", fallback: "sans-serif"}; // useGoogleFonts: True = use Google Fonts CSS (default); False = check other options // googleFontUrl: Default Roboto Google Fonts CSS link (third <link> from embed code) // googleFontName: Font name for Google Fonts (default: "Roboto") // useCustomUrl: True = use a custom online font file; False = use local if useGoogleFonts is also false // customFontName: Name for your custom online font (e.g., "MyFont") // customFontUrl: Direct URL to a font file (e.g., .woff2); empty by default // localFontName: Local font name if both useGoogleFonts and useCustomUrl are false // fallback: Fallback font if all else fails (default: "sans-serif") // --- How to Customize This Script --- // Option 1: Use Google Fonts (Default: Roboto) // - Keep useGoogleFonts: true // - Visit fonts.google.com, pick a font, select styles (e.g., weights, italics), click "Get font" // - Copy the third <link> URL from "Embed code in the <head> of your HTML" (e.g., "https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap") // - Paste it into googleFontUrl, update googleFontName to match (e.g., "Open Sans") // - Set useCustomUrl: false // // Option 2: Use a Custom Online Font File (e.g., .woff2) // - Set useGoogleFonts: false and useCustomUrl: true // - Set customFontName to your font’s name (e.g., "MyCoolFont") // - Set customFontUrl to a direct .woff2 file URL (e.g., "https://example.com/mycoolfont.woff2") // - .woff2 is recommended for speed and mobile compatibility—faster loading! // - Example: Roboto .woff2: "https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2" // // Option 3: Use a Local Font Installed on Your Computer // - Set useGoogleFonts: false and useCustomUrl: false // - Update localFontName to your font’s exact name (e.g., "Arial", "Times New Roman", "Comic Sans MS") // - Check the name in Windows (Settings > Fonts) or macOS (Font Book) function applyFontOverride() { // Determine and log the active font source const activeFont = fontSettings.useGoogleFonts ? fontSettings.googleFontName : fontSettings.useCustomUrl ? fontSettings.customFontName : fontSettings.localFontName; console.log(`Starting font override with ${activeFont}`); // --- Load Font Based on Selected Option --- if (fontSettings.useGoogleFonts) { console.log("Loading Google Fonts CSS: " + fontSettings.googleFontUrl); // Preconnect to fonts.googleapis.com const linkPreconnect1 = document.createElement('link'); linkPreconnect1.rel = "preconnect"; linkPreconnect1.href = "https://fonts.googleapis.com"; document.head.appendChild(linkPreconnect1); console.log("Added preconnect to https://fonts.googleapis.com"); // Preconnect to fonts.gstatic.com with crossorigin const linkPreconnect2 = document.createElement('link'); linkPreconnect2.rel = "preconnect"; linkPreconnect2.href = "https://fonts.gstatic.com"; linkPreconnect2.setAttribute("crossorigin", ""); document.head.appendChild(linkPreconnect2); console.log("Added preconnect to https://fonts.gstatic.com"); // Load the Google Fonts stylesheet const linkStylesheet = document.createElement('link'); linkStylesheet.rel = "stylesheet"; linkStylesheet.href = fontSettings.googleFontUrl; document.head.appendChild(linkStylesheet); console.log("Added stylesheet link: " + fontSettings.googleFontUrl); } else if (fontSettings.useCustomUrl && fontSettings.customFontUrl) { console.log("Loading custom font file: " + fontSettings.customFontUrl); const fontFaceStyle = document.createElement('style'); fontFaceStyle.textContent = ` @font-face { font-family: "${fontSettings.customFontName}"; src: url("${fontSettings.customFontUrl}") format("woff2"); } `; document.head.appendChild(fontFaceStyle); } else { console.log("Using local font: " + fontSettings.localFontName); } // --- Apply Font Styles --- const style = document.createElement('style'); style.type = 'text/css'; let cssContent = ''; // Apply the selected font to all common text elements const fontName = fontSettings.useGoogleFonts ? fontSettings.googleFontName : fontSettings.useCustomUrl ? fontSettings.customFontName : fontSettings.localFontName; cssContent += ` /* Apply ${fontName} to all common text elements */ body, p, h1, h2, h3, h4, h5, h6, span, div, a, li, td, th, input, textarea, select, option, label, button, i, em { font-family: "${fontName}", ${fontSettings.fallback} !important; } `; // --- Icon and Navigation Preservation --- // These rules ensure icons and navigation stay intact cssContent += ` /* Preserve generic icon fonts so they don’t get overridden */ [class*="icon-"], [class*="mdi-"], svg { font-family: inherit !important; } /* Keep Glyphicons working (e.g., home icon) */ .glyphicon, [class*="glyphicon-"] { font-family: "Glyphicons Halflings" !important; } /* Protect Font Awesome icons (e.g., gear, menu) across versions */ span.fa, span[class*="fa-"], i.fa, i[class*="fa-"] { font-family: "FontAwesome", "Font Awesome 5 Free", "Font Awesome 5 Pro", "Font Awesome 6 Free", "Font Awesome 6 Pro" !important; } /* Preserve Material Icons (e.g., menu from Google’s set) */ .material-icons, [class*="material-icons"] { font-family: "Material Icons" !important; } /* Preserve Icomoon icons (e.g., custom .icon classes) */ i.icon:not([class*="fa-"]):not([class*="glyphicon-"]):not([class*="material-icons"]):not([class*="mdi-"]) { font-family: "icomoon" !important; } /* Ensure NavTabs navigation icons don’t break */ #NavTabs *:not(.glyphicon):not([class*="glyphicon-"]):not(.fa):not([class*="fa-"]):not(.material-icons):not([class*="material-icons"]):not(.icon):not([class*="icon-"]) { font-family: inherit !important; } `; style.textContent = cssContent; document.head.appendChild(style); console.log("Font override applied successfully with " + fontName + "; Icon preservation for Glyphicons, Font Awesome, Material Icons, Icomoon"); } // --- Run the Function on Page Load --- window.addEventListener('load', applyFontOverride); applyFontOverride(); })();