您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Changes fonts back to their generic font family
// ==UserScript== // @name Clean Font Families // @namespace http://userscripts.org // @include * // @description Changes fonts back to their generic font family // @author Ralf Helbing ([email protected]), based on Sans-Serif Default by Pete Farmer <pfarmer at collaboros.com> // @version 0.1 // ==/UserScript== var sansSerif = [ 'sans-serif', 'arial', 'verdana', 'tahoma', 'geneva', 'helvetica']; var serif = [ 'serif', 'times', 'georgia']; var mono = [ 'monospaced', 'fixed', 'courier']; // set up regexps for font families var sansSerifRegExps = new Array(); for ( var i = 0; i < sansSerif.length; i++) { var matchEx = new RegExp( sansSerif[ i], "i"); sansSerifRegExps.push( matchEx); } var sansSerifRegExp = sansSerifRegExps.shift(); var serifRegExps = new Array(); for ( var i = 0; i < serif.length; i++) { var matchEx = new RegExp( serif[ i], "i"); serifRegExps.push( matchEx); } var serifRegExp = serifRegExps.shift(); var monoRegExps = new Array(); for ( var i = 0; i < mono.length; i++) { var matchEx = new RegExp( mono[ i], "i"); monoRegExps.push( matchEx); } var monoRegExp = monoRegExps.shift(); function logThis( logString) { // GM_log( logString); } function cleanElementItem0( item, regex, itemInfo, replacement) { if ( itemInfo == replacement) { logThis( "already clean: " + item); return true; } if ( regex.test( itemInfo)) { var style; if ( typeof( item.setProperty) == "function") { style = item; } else { style = item.style; } style.setProperty( "font-family", replacement, ""); logThis( "setting " + item + " with " + itemInfo + " to " + replacement); return true; } // logThis( "not cleaning " + item + " with " + item.style.fontFamily); return false; } function cleanElementItem( elementItem, elementFontFamily) { // logThis( "testing " + elementItem + " with " + elementFontFamily); if ( cleanElementItem0( elementItem, sansSerifRegExp, elementFontFamily, 'sans-serif')) { return true; } if ( cleanElementItem0( elementItem, serifRegExp, elementFontFamily, 'serif')) { return true; } if ( cleanElementItem0( elementItem, monoRegExp, elementFontFamily, 'monospace')) { return true; } var matched = false; // logThis( "testing " + elementItem + " with " + elementFontFamily); for ( var i = 0; i < sansSerifRegExps.length; i++) { matched = cleanElementItem0( elementItem, sansSerifRegExps[ i], elementFontFamily, 'sans-serif'); if ( matched) return true; } if ( ! matched) { for ( var i = 0; i < serifRegExps.length; i++) { matched = cleanElementItem0( elementItem, serifRegExps[ i], elementFontFamily, 'serif'); if ( matched) return true; } } if ( ! matched) { for ( var i = 0; i < monoRegExps.length; i++) { matched = cleanElementItem0( elementItem, monoRegExps[ i], elementFontFamily, 'monospace'); if ( matched) return true; } } return false; } function processStyleSheet(sheet) { logThis( "processing stylesheet: " + sheet + "/" + sheet.href); // FF does not like us to retrieve rules from disabled css if ( sheet.disabled) { logThis( "disabled"); return; } for (var which=0; which<sheet.cssRules.length; which++) { // logThis("sheet.cssRule "+ which +": "+sheet.cssRules[which].cssText); var rule = sheet.cssRules[which]; if (rule.type == rule.STYLE_RULE) { var cssStyle = rule.style; var elementFontFamily = cssStyle.getPropertyValue("font-family"); cleanElementItem( cssStyle, elementFontFamily); } if (rule.type == rule.IMPORT_RULE) { logThis("Recursing into an import rule: " + rule.cssText); processStyleSheet(rule.styleSheet); } if (rule.type == rule.MEDIA_RULE && ( rule.media.mediaText == "screen" || rule.media.mediaText == "print")) { logThis("Recursing into media rule: " + rule.cssText); processStyleSheet(rule); } } } // Process all stylesheets for(var i = 0; i < document.styleSheets.length; i++) { var sheet = document.styleSheets[i] processStyleSheet(sheet); } logThis("CSS finished"); var elementList = document.getElementsByTagName('*'); for (var eI = elementList.length - 1; eI >= 0; eI--) { // get computed font family var elementItem = elementList[ eI]; var style = getComputedStyle(elementItem, null); if ( style == null) { continue; } var elementFontFamily = style.fontFamily; // if parent exists, check if font family different var parent = elementItem.parentNode; if ( parent != null && parent.nodeType == Node.ELEMENT_NODE) { // logThis("parent type: " + parent.nodeType + " of " + elementItem); style = getComputedStyle(parent, null); if ( style != null) { var parentFontFamily = style.fontFamily; if ( parentFontFamily == ( elementFontFamily)) { // logThis( "Font " + elementFontFamily + " for " + elementItem + " == " + parentFontFamily); continue; // change nothing if font family was inherited } else { // logThis( "Font " + elementFontFamily + " for " + elementItem + " != " + parentFontFamily); } } } if ( cleanElementItem( elementItem, elementFontFamily)) { continue; } }