通义千问 - 侧边栏状态记忆

创建于 20 天前
更新于 20 天前
刷新后等待用户操作,若用户手动切换则记忆新状态;否则按记忆自动恢复。避免干扰用户即时操作。
总安装量
28
今日新增
+0
用户评分
- / 5.0 (0)
当前版本
1.0
脚本详情
适用网站

通义千问 - 侧边栏状态记忆

TampermonkeyViolentmonkey脚本猫版本

功能简介

这是专为通义千问设计的侧边栏状态增强脚本。解决了官方页面刷新后侧边栏状态重置的问题,通过智能算法实现“用户优先”的状态记忆与恢复。

  • 智能状态记忆:自动记录侧边栏的展开/收起状态,刷新页面或重新进入聊天页时自动恢复上次设置。
  • 用户操作优先:采用“延迟纠正”机制,若用户在加载后手动切换侧边栏,脚本会立即取消自动恢复计划并更新记忆,避免与用户即时操作冲突。
  • 无感平滑体验:仅在检测到状态不一致且用户未操作时,才在短暂延迟后自动执行切换,确保界面稳定不闪烁。
  • SPA 路由适配:内置 MutationObserver 监听器,完美适配通义千问的单页应用(SPA)架构,在路由跳转时也能准确维持状态。
  • 高性能低开销:基于原生 DOM 查询与事件委托,资源占用极低,不影响页面正常加载与交互性能。

功能特点

核心状态管理能力

  • 🧠 精准识别:通过分析侧边栏容器的 CSS 类名(如 w-[16rem], translate-x-full)精准判断当前是“展开”还是“收起”状态。
  • 🔄 双向同步:既能在页面加载时从本地存储恢复状态,也能在用户手动操作后实时更新本地存储,保持记忆最新。
  • ⏱️ 防抖保护:设置 3 秒(可配置)的操作窗口期,给予用户充分的手动干预时间,防止脚本“抢跑”。
  • 🛡️ 冲突规避:一旦检测到用户点击了侧边栏切换按钮,立即终止所有待执行的自动纠正任务,确保用户意图至上。

高性能与稳定性

  • 🚀 轻量级监听:使用事件委托监听全局点击事件,而非为每个按钮绑定独立监听器,大幅减少内存占用。
  • 🔋 按需执行:仅在状态不一致时才触发 DOM 操作,避免无效的点击模拟,延长浏览器生命周期。
  • 🌐 全场景覆盖:支持页面首次加载、F5 刷新、以及 SPA 内部路由跳转(如从首页进入聊天页)等多种场景。
  • 📊 调试友好:内置详细的 Console 日志输出(可配置开关),方便开发者或高级用户排查状态同步问题。

交互体验

  • 👁️ 视觉一致性:确保每次打开通义千问时,侧边栏都保持用户习惯的状态(如习惯收起的用户无需每次手动关闭)。
  • 🖱️ 零学习成本:完全后台运行,无需额外 UI 或设置,安装即用,符合直觉。
  • 🔕 静默运行:除非开启调试模式,否则脚本在后台静默工作,不弹出任何通知或干扰正常聊天流程。

安装方法

  1. 确保浏览器已安装用户脚本管理器扩展:

  2. 点击下方链接安装脚本:
    安装脚本

  3. 或者手动创建新脚本,复制上述完整代码并保存至脚本管理器

适用页面

  • https://www.qianwen.com/*

操作说明

操作方式 功能 详细说明
正常浏览/刷新页面 自动恢复状态 脚本读取本地记忆,若状态不一致且在窗口期内无用户操作,则自动切换侧边栏至记忆状态
手动点击侧边栏按钮 更新记忆状态 用户手动展开或收起侧边栏,脚本检测到点击后,立即取消自动计划,并将新状态存入本地存储
快速连续操作 优先响应用户 在页面加载后的 3 秒内,用户的任何手动切换操作都具有最高优先级,脚本不会干扰

注意:

  1. 首次使用时,脚本会记录当前的侧边栏状态作为初始记忆。
  2. 若希望改变默认状态,只需手动切换一次侧边栏,脚本会自动更新记忆。
  3. 脚本依赖通义千问特定的 CSS 类名,若官网大幅改版可能导致失效,请关注更新。
  4. 自动纠正有约 3 秒的延迟,这是为了等待用户操作,属于正常设计逻辑。

技术细节

核心配置

const CONFIG = {
    storageKey: 'qianwen_sidebar_state_v8', // 本地存储键名
    iconLeft: 'qwpcicon-sidebarLeft',       // 收起按钮图标标识
    iconRight: 'qwpcicon-sidebarRight',     // 展开按钮图标标识
    debug: true,                            // 是否开启控制台日志
    userActionWindow: 3000,                 // 用户操作窗口期(毫秒),默认3秒
};

核心功能实现

// 1. 状态识别:通过 CSS 类名判断侧边栏物理状态
function getSidebarStateByLayout() {
    const aside = document.querySelector('aside#new-nav-tab-wrapper');
    // 检查宽度类名和位移类名来综合判断
    const isExpanded = aside.classList.contains('w-[16rem]');
    const isCollapsed = aside.classList.contains('w-0') || innerDiv.classList.contains('translate-x-full');
    // 返回 'expanded' 或 'collapsed'
}

// 2. 用户优先逻辑:监听点击,取消自动计划
document.body.addEventListener('click', (e) => {
    if (isSidebarToggleButton(e.target)) {
        hasUserActed = true; // 标记用户已介入
        clearTimeout(autoCorrectTimer); // 撤销即将执行的自动纠正
        updateStorage(); // 记录用户选择的新状态
    }
}, true);

// 3. 延迟自动纠正:给用户留出操作时间
setTimeout(() => {
    if (!hasUserActed && currentState !== savedState) {
        clickToggleButton(savedState); // 执行恢复
    }
}, CONFIG.userActionWindow);

执行流程

  1. 初始化:页面加载完成后,脚本启动并注册全局点击监听器。
  2. 初始检测:延迟 500ms 后,获取当前侧边栏物理状态,并与本地存储对比。
  3. 决策分支
    • 若状态一致:无需操作。
    • 若状态不一致:启动定时器,计划在 userActionWindow (3秒) 后执行自动纠正。
  4. 用户干预
    • 若在 3 秒内用户点击了切换按钮:脚本标记 hasUserActed = true,清除定时器,并更新本地存储为新状态。
    • 若 3 秒内用户无操作:定时器触发,脚本模拟点击切换按钮,将侧边栏恢复至记忆状态。
  5. 路由监听:MutationObserver 持续监听 DOM 变化,在 SPA 路由跳转时重复上述逻辑,确保持久化生效。

常见问题

Q: 为什么刷新后侧边栏会先闪动一下再恢复?

A:
这是“用户优先”机制的正常表现。脚本故意延迟了约 3 秒才执行自动恢复,目的是等待用户手动操作。如果用户在这 3 秒内没有操作,脚本才会介入。这种设计避免了脚本在用户刚想手动展开时强行收起的冲突。

Q: 我想修改延迟时间怎么办?

A:
可以在脚本顶部的 CONFIG 对象中修改 userActionWindow 的值。例如改为 1000 表示 1 秒后执行,改为 5000 表示 5 秒。建议根据网络加载速度和个人操作习惯调整。

Q: 脚本没有生效怎么办?

A:

  1. 确认当前域名是 www.qianwen.com
  2. 打开浏览器控制台(F12),查看是否有 [QW Helper] 开头的日志。
  3. 检查是否禁用了 JavaScript 或安装了其他冲突的样式插件。
  4. 尝试清除浏览器本地存储中的 qianwen_sidebar_state_v8 键值,刷新页面重试。

Q: 会记录我的聊天内容吗?

A:
绝对不会。脚本仅记录侧边栏的“展开”或“收起”状态字符串,不涉及任何聊天数据、个人信息或 Cookie 的读取与上传,隐私安全有保障。

更新日志

v1.0

  • 🎉 初始版本:实现通义千问侧边栏状态记忆功能
  • 🧠 智能算法:引入“用户优先 + 延迟纠正”机制,完美解决状态冲突问题
  • 🔄 SPA 适配:支持单页应用路由跳转时的状态持久化
  • 🛡️ 防抖设计:3 秒操作窗口期,确保不干扰用户即时交互
  • 📊 日志系统:内置详细调试日志,便于问题排查

免责声明

本脚本仅供学习交流使用,请勿用于商业用途。脚本仅模拟人工点击操作,未修改通义千问的任何核心功能和页面结构,使用脚本产生的一切后果由使用者自行承担。

反馈与支持

如果您在使用过程中遇到问题或有改进建议,请通过以下方式反馈:

  • 在脚本管理器的脚本评论区留言
  • 提交 Issue 到脚本仓库
  • 反馈通义千问页面结构更新导致的脚本失效问题

温馨提示

  1. 若通义千问更新前端结构(如侧边栏 ID 或类名变化),可能导致脚本失效,请关注最新版本
  2. 建议保留默认的 3 秒延迟,以获得最佳的用户体验平衡
  3. 脚本兼容 Tampermonkey、Violentmonkey 等主流管理器
  4. 如需彻底重置状态,可在浏览器控制台执行 localStorage.removeItem('qianwen_sidebar_state_v8')