// ==UserScript== // @name 通义千问 - 侧边栏状态记忆 // @namespace http://tampermonkey.net/ // @version 1.0 // @description 刷新后等待用户操作,若用户手动切换则记忆新状态;否则按记忆自动恢复。避免干扰用户即时操作。 // @author qwe250qwe // @match https://www.qianwen.com/* // @grant none // @icon data:image/png;base64,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 // @run-at document-idle // ==/UserScript== (function() { 'use strict'; const CONFIG = { storageKey: 'qianwen_sidebar_state_v8', iconLeft: 'qwpcicon-sidebarLeft', // 收起按钮 iconRight: 'qwpcicon-sidebarRight', // 展开按钮 debug: true, userActionWindow: 3000, // 用户操作窗口期(毫秒),默认3秒 }; function log(...args) { if (CONFIG.debug) console.log('%c[QW Helper]', 'color: #007bff; font-weight: bold;', ...args); } let isProcessing = false; let hasUserActed = false; // 标记用户是否已手动操作 let autoCorrectTimer = null; /** * 通过布局类名判断侧边栏状态 */ function getSidebarStateByLayout() { const aside = document.querySelector('aside#new-nav-tab-wrapper'); if (!aside) return null; const isAsideExpanded = aside.classList.contains('w-[16rem]'); const isAsideCollapsed = aside.classList.contains('w-0'); const innerDiv = aside.querySelector('div.w-\\[16rem\\]'); let isInnerTranslated = false; if (innerDiv) { isInnerTranslated = innerDiv.classList.contains('translate-x-full'); } if (isAsideExpanded && !isInnerTranslated) { return 'expanded'; } else if (isAsideCollapsed || isInnerTranslated) { return 'collapsed'; } return null; } /** * 查找并点击对应的切换按钮 */ function clickToggleButton(targetState) { const iconType = targetState === 'collapsed' ? CONFIG.iconLeft : CONFIG.iconRight; const span = document.querySelector(`span[data-icon-type="${iconType}"]`); if (span) { const btn = span.closest('button'); if (btn) { log(`自动纠正: 点击 ${iconType} 按钮`); btn.click(); return true; } } return false; } /** * 主同步逻辑(带延迟和用户优先) */ function scheduleAutoCorrect() { if (hasUserActed) { log('用户已手动操作,跳过自动纠正'); return; } const currentState = getSidebarStateByLayout(); if (!currentState) return; let savedState = localStorage.getItem(CONFIG.storageKey); if (!savedState) { localStorage.setItem(CONFIG.storageKey, currentState); log(`首次运行,记录初始状态: ${currentState}`); return; } if (currentState !== savedState) { log(`计划自动纠正 [当前:${currentState} | 目标:${savedState}],将在 ${CONFIG.userActionWindow}ms 后执行...`); autoCorrectTimer = setTimeout(() => { if (!hasUserActed) { isProcessing = true; log(`执行自动纠正...`); if (clickToggleButton(savedState)) { setTimeout(() => { isProcessing = false; }, 800); } else { isProcessing = false; } } else { log('用户已在窗口期内操作,取消自动纠正'); } }, CONFIG.userActionWindow); } } /** * 监听用户手动点击,更新本地存储 & 标记用户已操作 */ function initClickListener() { document.body.addEventListener('click', (e) => { const target = e.target.closest('button'); if (!target) return; const hasLeftIcon = target.querySelector(`span[data-icon-type="${CONFIG.iconLeft}"]`); const hasRightIcon = target.querySelector(`span[data-icon-type="${CONFIG.iconRight}"]`); if (hasLeftIcon || hasRightIcon) { hasUserActed = true; // 标记用户已操作 log('检测到用户手动操作,取消自动纠正计划'); // 清除待执行的自动纠正 if (autoCorrectTimer) { clearTimeout(autoCorrectTimer); autoCorrectTimer = null; } // 延迟记录新状态(等动画完成) setTimeout(() => { const newState = getSidebarStateByLayout(); if (newState) { localStorage.setItem(CONFIG.storageKey, newState); log(`更新记忆状态为: ${newState}`); } }, 300); } }, true); } // ================= 启动逻辑 ================= function init() { log('脚本 v8.0 启动 (用户优先 + 延迟纠正)'); // 1. 初始化点击监听 initClickListener(); // 2. 延迟启动自动纠正(给用户操作留出时间) setTimeout(scheduleAutoCorrect, 500); // 页面加载后0.5秒开始计时 // 3. 监听 DOM 变化(应对 SPA 路由跳转) const observer = new MutationObserver(() => { requestAnimationFrame(() => { if (!hasUserActed) { scheduleAutoCorrect(); } }); }); observer.observe(document.body, { childList: true, subtree: true }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })();