// ==UserScript== // @name 缩小标题字体,缩小图片 // @namespace http://tampermonkey.net/ // @version 0.62 // @description 摸鱼的艺术,更新hover时恢复图片大小 // @author You // @match http://*/* // @exclude *.png // @exclude *.jpg // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @grant none // @license MIT // @downloadURL none // ==/UserScript== (function() { 'use strict'; function addCSS(cssText) { var style = document.createElement('style') , //创建一个style元素 head = document.head || document.getElementsByTagName('head')[0]; //获取head元素 style.type = 'text/css'; //这里必须显示设置style元素的type属性为text/css,否则在ie中不起作用 if (style.styleSheet) { //IE var func = function() { try { //防止IE中stylesheet数量超过限制而发生错误 style.styleSheet.cssText = cssText; } catch (e) { } } //如果当前styleSheet还不能用,则放到异步中则行 if (style.styleSheet.disabled) { setTimeout(func, 10); } else { func(); } } else { //w3c //w3c浏览器中只要创建文本节点插入到style元素中就行了 var textNode = document.createTextNode(cssText); style.appendChild(textNode); } head.appendChild(style); //把创建的style元素插入到head中 } const func = ()=>{ setTimeout(()=>{ let cssTxt = ''; Array.from(document.getElementsByTagName('*')).forEach(ele=>{ if (!['HTML', 'HEAD', 'BODY'].includes(ele.tagName)) { const fontSizeStr = getComputedStyle(ele).fontSize; const fontSizeRes = fontSizeStr.match(/(\d+)(\w+)/); if (fontSizeRes) { const num = fontSizeRes.at(1); const unit = fontSizeRes.at(2); const isTooBig = unit === 'rem' ? Number(num) > 1 : Number(num) > 20 ele.style.fontSize = '16px'; } } if (ele.tagName === 'IMG') { if (['.png', '.jpg', '.gif'].some(i=>location.href.includes(i))) return; //忽略图片预览类网址 debugger const imgWidthStr = getComputedStyle(ele).width; const imgWidthRes = imgWidthStr.match(/^([+-]?(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?)\s*([a-zA-Z]*)$/); if (imgWidthRes) { const num = imgWidthRes.at(1); const unit = imgWidthRes.at(2); const isTooBig = unit === 'rem' ? Number(num) > 10 : Number(num) > 500 if (isTooBig) { //hover时恢复图片尺寸 const hasAnimation = getComputedStyle(ele).transition !== 'all 0s ease 0s' if (!hasAnimation) { function genCSSSelector(ele) { if (ele.id || ele.className) return ele.id ? `img[id="${ele.id}]"` : `img[class="${ele.className}"]` else { console.log(ele.src); return `img[src="${ele.src}"]`; } } cssTxt += ` ${genCSSSelector(ele)}:hover{ width:${ele.width}px !important;height:${ele.height}px !important; } `; } //变小 ele.style.width = '150px'; ele.style.height = 'auto'; } //使用 } } } ) addCSS(cssTxt); console.log('缩小字体完成'); } , 1000) } func(); window.addEventListener('hashchange', ()=>{ console.log('hash change'); func(); } ) //修改native以拦截popstate事件 var pushState = history.pushState; history.pushState = function() { var ret = pushState.apply(history, arguments); window.dispatchEvent(new Event("pushstate")); window.dispatchEvent(new Event("locationchangefathom")); return ret; } window.addEventListener("popstate", function() { window.dispatchEvent(new Event("locationchangefathom")) }); window.addEventListener("locationchangefathom", trackPageview) function trackPageview() { func(); } } )();