您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
为知识星球提供纯净的阅读模式,隐藏侧边栏和导航栏,自动展开内容,专注阅读体验
// ==UserScript== // @name 知识星球阅读模式增强器 // @namespace https://github.com/donggeai/Awesome-Tampermonkey-Scripts // @version 1.0.0 // @description 为知识星球提供纯净的阅读模式,隐藏侧边栏和导航栏,自动展开内容,专注阅读体验 // @author 东哥说AI // @match https://wx.zsxq.com/group/* // @grant none // @license MIT // @homepage https://github.com/donggeai/Awesome-Tampermonkey-Scripts // @supportURL https://github.com/donggeai/Awesome-Tampermonkey-Scripts/issues // ==/UserScript== (function() { 'use strict'; // 配置选项 const CONFIG = { buttonText: '📖 阅读模式', exitButtonText: '🔙 退出阅读', autoExpandDelay: 500, // 自动展开延迟时间(ms) scrollCheckInterval: 1000, // 滚动检查间隔(ms) storageKey: 'zsxq_reading_mode' }; // 状态管理 let isReadingMode = false; let scrollPosition = 0; let autoExpandTimer = null; let scrollCheckTimer = null; let readingButton = null; // CSS样式 const styles = ` .zsxq-reading-button { position: fixed; bottom: 30px; right: 30px; z-index: 9999; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; border: none; border-radius: 25px; padding: 12px 20px; font-size: 14px; font-weight: 600; cursor: pointer; box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3); transition: all 0.3s ease; backdrop-filter: blur(10px); user-select: none; } .zsxq-reading-button:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4); } .zsxq-reading-button:active { transform: translateY(0); } .zsxq-reading-mode { background: #f8f9fa !important; } .zsxq-reading-mode .group-list-container, .zsxq-reading-mode app-group-list, .zsxq-reading-mode .group-preview-wrapper, .zsxq-reading-mode app-group-info { display: none !important; } /* 隐藏头部导航栏 */ .zsxq-reading-mode .header-container { display: none !important; } .zsxq-reading-mode .topic-flow-container { margin-left: 0 !important; margin-right: 0 !important; max-width: 1000px !important; margin: 0 auto !important; padding: 20px !important; } .zsxq-reading-mode .main-content-container { max-width: 100% !important; margin: 0 auto !important; padding-top: 20px !important; } /* 确保时间轴正确显示 */ .zsxq-reading-mode .timeline-container { position: absolute !important; right: -40px !important; } .zsxq-reading-mode .topic-container { margin-bottom: 30px; background: white; border-radius: 12px; box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); overflow: hidden; position: relative !important; } .zsxq-reading-mode .talk-content-container .content { max-height: none !important; overflow: visible !important; } .zsxq-reading-mode .ellipsis, .zsxq-reading-mode .showAll { display: none !important; } .zsxq-reading-notification { position: fixed; bottom: 90px; right: 30px; background: rgba(34, 197, 94, 0.9); color: white; padding: 10px 16px; border-radius: 8px; font-size: 13px; z-index: 9998; opacity: 0; transform: translateX(100%); transition: all 0.3s ease; } .zsxq-reading-notification.show { opacity: 1; transform: translateX(0); } `; // 初始化样式 function initStyles() { const styleSheet = document.createElement('style'); styleSheet.textContent = styles; document.head.appendChild(styleSheet); } // 创建阅读模式按钮 function createReadingButton() { readingButton = document.createElement('button'); readingButton.className = 'zsxq-reading-button'; readingButton.textContent = CONFIG.buttonText; readingButton.addEventListener('click', toggleReadingMode); document.body.appendChild(readingButton); } // 显示通知 function showNotification(message, duration = 2000) { const notification = document.createElement('div'); notification.className = 'zsxq-reading-notification'; notification.textContent = message; document.body.appendChild(notification); setTimeout(() => notification.classList.add('show'), 100); setTimeout(() => { notification.classList.remove('show'); setTimeout(() => document.body.removeChild(notification), 300); }, duration); } // 自动展开所有内容 function autoExpandContent() { const expandButtons = document.querySelectorAll('.showAll'); let expandedCount = 0; expandButtons.forEach(button => { if (button.style.display !== 'none' && button.offsetParent !== null) { button.click(); expandedCount++; } }); if (expandedCount > 0) { console.log(`[知识星球阅读模式] 自动展开了 ${expandedCount} 个内容`); } return expandedCount; } // 启动滚动监听 function startScrollMonitoring() { if (scrollCheckTimer) { clearInterval(scrollCheckTimer); } scrollCheckTimer = setInterval(() => { if (isReadingMode) { autoExpandContent(); } }, CONFIG.scrollCheckInterval); } // 停止滚动监听 function stopScrollMonitoring() { if (scrollCheckTimer) { clearInterval(scrollCheckTimer); scrollCheckTimer = null; } } // 切换阅读模式 function toggleReadingMode() { if (!isReadingMode) { enterReadingMode(); } else { exitReadingMode(); } } // 进入阅读模式 function enterReadingMode() { // 保存当前滚动位置 scrollPosition = window.pageYOffset || document.documentElement.scrollTop; // 添加阅读模式样式 document.body.classList.add('zsxq-reading-mode'); // 更新按钮文本 readingButton.textContent = CONFIG.exitButtonText; // 延迟展开内容,确保DOM更新完成 setTimeout(() => { const expandedCount = autoExpandContent(); if (expandedCount > 0) { showNotification(`已自动展开 ${expandedCount} 个内容`); } // 恢复滚动位置 window.scrollTo(0, scrollPosition); }, CONFIG.autoExpandDelay); // 启动滚动监听 startScrollMonitoring(); isReadingMode = true; localStorage.setItem(CONFIG.storageKey, 'true'); showNotification('已进入阅读模式 📖'); console.log('[知识星球阅读模式] 已启用阅读模式'); } // 退出阅读模式 function exitReadingMode() { // 保存当前滚动位置 scrollPosition = window.pageYOffset || document.documentElement.scrollTop; // 移除阅读模式样式 document.body.classList.remove('zsxq-reading-mode'); // 更新按钮文本 readingButton.textContent = CONFIG.buttonText; // 停止滚动监听 stopScrollMonitoring(); // 恢复滚动位置 setTimeout(() => { window.scrollTo(0, scrollPosition); }, 100); isReadingMode = false; localStorage.setItem(CONFIG.storageKey, 'false'); showNotification('已退出阅读模式 🔙'); console.log('[知识星球阅读模式] 已退出阅读模式'); } // 恢复上次的阅读模式状态 function restoreReadingMode() { const savedState = localStorage.getItem(CONFIG.storageKey); if (savedState === 'true') { setTimeout(() => { enterReadingMode(); }, 1000); // 延迟启动,确保页面加载完成 } } // 页面加载完成后初始化 function init() { // 等待页面主要内容加载 const checkPageReady = setInterval(() => { const mainContent = document.querySelector('.topic-flow-container'); if (mainContent) { clearInterval(checkPageReady); initStyles(); createReadingButton(); restoreReadingMode(); console.log('[知识星球阅读模式] 脚本已初始化'); } }, 500); // 10秒后停止检查,避免无限循环 setTimeout(() => { clearInterval(checkPageReady); }, 10000); } // 页面卸载时清理 window.addEventListener('beforeunload', () => { stopScrollMonitoring(); if (autoExpandTimer) { clearTimeout(autoExpandTimer); } }); // 监听页面变化(SPA路由) let currentUrl = location.href; const urlObserver = new MutationObserver(() => { if (location.href !== currentUrl) { currentUrl = location.href; if (location.href.includes('/group/')) { setTimeout(init, 1000); } } }); urlObserver.observe(document.body, { childList: true, subtree: true }); // 启动脚本 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })();