// ==UserScript== // @name 125论坛手机版优化 // @namespace http://tampermonkey.net/ // @version 1.2 // @description 优化125论坛(bbs.125.la)在手机端的显示效果 // @author Your name // @match https://bbs.125.la/* // @grant none // @downloadURL none // ==/UserScript== (function() { 'use strict'; // 检查是否为移动端访问 if(!/mobile/i.test(navigator.userAgent)) return; // 强制设置viewport并防止被修改 function setViewport() { let viewport = document.querySelector('meta[name="viewport"]'); if(!viewport) { viewport = document.createElement('meta'); viewport.name = 'viewport'; document.head.appendChild(viewport); } const currentContent = viewport.content; const newContent = 'width=device-width, initial-scale=1.0, maximum-scale=2.0, user-scalable=yes'; // 只在内容不同时更新,避免无限循环 if(currentContent !== newContent) { viewport.content = newContent; } } // 初始设置viewport setViewport(); // 使用防抖函数来限制viewport更新频率 function debounce(func, wait) { let timeout; return function() { clearTimeout(timeout); timeout = setTimeout(() => func(), wait); }; } // 监听viewport变化,使用防抖 const debouncedSetViewport = debounce(setViewport, 100); const observer = new MutationObserver(debouncedSetViewport); observer.observe(document.head, { subtree: true, attributes: true, attributeFilter: ['content'] }); // 添加自定义样式 const customCSS = ` /* 重置所有元素的字体大小计算方式 */ * { font-size: initial !important; transform: none !important; zoom: normal !important; -webkit-text-size-adjust: none !important; box-sizing: border-box !important; } /* 使用rem作为基础单位 */ html { font-size: 16px !important; } /* 基础样式设置 */ body { font-size: 1rem !important; line-height: 1.8 !important; text-size-adjust: 100% !important; -webkit-text-size-adjust: 100% !important; max-width: 100vw !important; overflow-x: hidden !important; } /* 响应式字体大小 */ .thread_tit, h3 { font-size: 1.1rem !important; line-height: 1.4 !important; margin: 0.5rem 0 !important; } .f_count, .sub_forum { font-size: 0.9rem !important; line-height: 1.4 !important; } /* 列表项内容 */ .sub_forum li { padding: 0.75rem 0.5rem !important; font-size: 1rem !important; margin-bottom: 0.5rem !important; border-bottom: 1px solid rgba(0,0,0,0.1) !important; } /* 导航和按钮 */ .btFixed, .header, .footer { font-size: 0.875rem !important; line-height: 1.4 !important; } /* 链接和可点击元素 */ a, button, input[type="button"], input[type="submit"] { padding: 0.5rem !important; min-height: 44px !important; display: inline-block !important; line-height: 1.4 !important; vertical-align: middle !important; } /* 内容区域 */ .container, .content { padding: 0.625rem !important; width: 100% !important; margin: 0 !important; } /* 图片响应式 */ img { max-width: 100% !important; height: auto !important; transform: none !important; vertical-align: middle !important; } /* 修复可能的溢出问题 */ div, p, span, li { max-width: 100vw !important; word-wrap: break-word !important; overflow-wrap: break-word !important; margin: 0 !important; } /* 修复行高和间距 */ .forum_a { display: block !important; padding: 0.5rem !important; margin: 0 !important; line-height: 1.4 !important; } /* 优化列表显示 */ .sub_forum ul { margin: 0 !important; padding: 0 !important; list-style: none !important; } /* 清除浮动 */ .cfix::after { content: "" !important; display: table !important; clear: both !important; } `; // 插入自定义样式 const styleElement = document.createElement('style'); styleElement.textContent = customCSS; document.head.appendChild(styleElement); // 防止其他脚本修改样式,使用防抖 const debouncedReapplyStyles = debounce(() => { setViewport(); if(!document.head.contains(styleElement)) { document.head.appendChild(styleElement); } }, 100); window.addEventListener('load', debouncedReapplyStyles); // 定期检查样式是否被移除 setInterval(debouncedReapplyStyles, 1000); })();