总安装量
391
今日新增
+0
用户评分
- / 5.0 (0)
当前版本
2.1
通义千问提问自动折叠
功能简介
这是专为通义千问聊天页面设计的长文本自动折叠脚本,聚焦高性能、无内存泄漏、状态记忆三大核心优化。适配通义千问最新前端架构,全场景精准识别并折叠超长提问文本,彻底解决长文本占据大量屏幕空间的问题。
- 智能自动折叠:页面加载/滚动/动态新增文本时,自动识别未折叠的长文本并一键收起,仅针对提问项核心区域生效。
- 新版结构适配:针对通义千问最新 DOM 结构优化,通过
data-chat-list-key属性精准定位,利用 SVG 旋转状态类名判断折叠状态,稳定性更强。 - 状态记忆功能:本地保存自动折叠开关状态,刷新/重新打开页面自动恢复上次设置,无需重复配置。
- 高性能设计:缩小 DOM 监听范围、防抖滚动触发、延长巡检间隔,相比普通版本减少无效 DOM 操作,不占用页面性能。
- 可视化开关:页面右上角悬浮开关按钮,一键切换「开启/关闭」,按钮颜色区分状态(蓝色=开启,灰色=关闭),点击带防抖保护。
- 彩色调试日志:内置详细的彩色控制台日志系统,清晰展示初始化、检测、折叠等操作细节,便于开发者或高级用户排查问题。
- 内存安全保障:页面卸载时自动销毁所有监听器/定时器,彻底避免内存泄漏,适配长期使用场景。
- ⚠️展开说明:自动折叠开启状态下无法直接展开长文本,需先点击右上角开关关闭折叠功能,再手动点击文本展开按钮即可正常展开。
功能特点
核心文本折叠能力
- 🎯 精准定位:基于
data-chat-list-key$="-question"属性选择器,精准匹配通义千问聊天页的提问项容器,避免误操作其他页面元素。 - 🔄 全场景触发:覆盖页面加载、滚动、动态新增文本等所有交互场景,确保长文本及时折叠,无遗漏。
- ⚡ 状态感知:通过检测底部箭头 SVG 是否包含
qs-bottom-icon-svg-rotate类来判断折叠状态,只处理“未折叠”项,避免重复点击。 - 📌 操作优化:单个文本容器仅折叠一次,找到目标后立即执行点击,提升执行效率。
高性能与稳定性
- 🚀 监听优化:优先监听
.chat-content核心区域,并限定只监听子节点增删,大幅降低回调触发频率。 - 🎛️ 防抖处理:滚动事件防抖(150ms),避免快速滚动时频繁执行折叠逻辑,平衡实时性与性能。
- ⏱️ 巡检控制:1秒一次定时巡检,既保证折叠无遗漏,又减少性能消耗,适配低配置设备。
- 🛡️ 内存安全:页面卸载时自动销毁 MutationObserver/定时器/事件监听,彻底杜绝内存泄漏,长期使用无卡顿。
- 📊 状态管理:单一数据源管理所有运行状态,避免冗余变量导致的逻辑混乱,降低维护成本。
交互体验
- 🔘 可视化开关:右上角悬浮按钮采用圆角+阴影设计,不遮挡核心聊天内容,颜色+文字清晰展示当前状态,操作直观。
- 💾 状态记忆:本地
localStorage存储保存开关状态,关闭浏览器/刷新页面后仍保持上次设置,无需重复操作。 - 🎨 样式适配:按钮样式与通义千问页面风格兼容,hover 无额外卡顿,点击有防抖保护,避免误触。
- 🌈 彩色日志:控制台输出带背景色的清晰日志(INFO/ACTION/WARN/ERROR),便于调试和问题定位,技术用户可快速排查异常。
安装方法
确保浏览器已安装用户脚本管理器扩展:
- Tampermonkey (推荐)
- Violentmonkey
- 脚本猫 (国产,中文友好)
或者手动创建新脚本,复制上述完整代码并保存至脚本管理器
适用页面
https://www.qianwen.com/chat/*
操作说明
| 操作方式 | 功能 | 详细说明 |
|---|---|---|
| 页面加载完成 | 自动折叠长文本 | 开启状态下,自动识别并收起所有未折叠的长文本,仅针对提问项生效 |
| 点击右上角悬浮按钮 | 切换自动折叠状态 | 蓝色=开启,灰色=关闭,状态自动本地保存,点击带200ms防抖 |
| 滚动页面 | 触发折叠检查(防抖) | 滚动停止150ms后检查并折叠新出现的长文本,避免频繁触发 |
| 新增聊天内容 | 实时自动折叠 | MutationObserver监听,新增文本立即识别并折叠,无延迟 |
| 展开长文本操作 | 关闭折叠+手动展开 | 先点击右上角开关将状态切为灰色(关闭),再点击文本自身的展开按钮即可正常展开 |
注意:
- 开关按钮默认位置:右上角85px、顶部13px,可修改代码中
CONFIG.BTN_POSITION参数自定义调整位置- 首次使用默认开启自动折叠(按钮蓝色),关闭后下次打开页面仍保持关闭状态
- 自动折叠开启时,手动点击文本展开按钮无效,需先关闭折叠功能
技术细节
核心配置
// 核心配置参数,集中管理便于修改
const CONFIG = {
STORAGE_KEY: 'qianwen_auto_collapse_v2_enabled', // 状态本地存储键名
SWITCH_BTN_ID: 'qianwen-collapse-switch-v2', // 开关按钮唯一ID
// 新结构选择器
QUESTION_CONTAINER_ATTR: 'div[data-chat-list-key$="-question"]', // 问题容器属性选择器
BOTTOM_ICON_CONTAINER_CLASS: '.qs-bottom', // 底部操作栏类名
COLLAPSE_SVG_CLASS: '.qs-bottom-icon-svg', // 折叠图标SVG类名
ROTATED_CLASS: 'qs-bottom-icon-svg-rotate', // 旋转状态类名(表示已折叠)
SCROLL_DEBOUNCE_MS: 150, // 滚动防抖延迟(毫秒)
POLL_INTERVAL_MS: 1000, // 定时巡检间隔(毫秒)
BTN_POSITION: { top: 13, right: 85, zIndex: 9999 } // 开关按钮位置配置
};
核心功能实现
// 1. 精准折叠核心逻辑,基于SVG旋转状态判断
function collapseUnfoldedText() {
if (!state.autoCollapseEnabled) return;
// 获取所有问题容器
const containers = document.querySelectorAll(CONFIG.QUESTION_CONTAINER_ATTR);
containers.forEach(container => {
// 定位折叠按钮的 SVG
const collapseSvg = container.querySelector(`${CONFIG.BOTTOM_ICON_CONTAINER_CLASS} ${CONFIG.COLLAPSE_SVG_CLASS}`);
if (!collapseSvg) return;
// 关键判断:如果不包含 'qs-bottom-icon-svg-rotate' 类,说明是展开状态,需要折叠
if (!collapseSvg.classList.contains(CONFIG.ROTATED_CLASS)) {
const btnParent = collapseSvg.closest('.qs-bottom-icon');
if (btnParent) {
btnParent.click(); // 模拟点击
Logger.action(`发现未折叠问题,执行点击折叠`);
}
}
});
}
// 2. 彩色日志系统
const Logger = {
info: (msg) => console.log(`%c[QW] INFO%c ${msg}`, 'background:#2c3e50;color:#fff;', 'color:#3498db;'),
action: (msg) => console.log(`%c[QW] ACTION%c ${msg}`, 'background:#2c3e50;color:#fff;', 'color:#27ae60;'),
// ... 其他级别日志
};
执行流程
- 页面加载完成后初始化运行状态,从本地存储读取自动折叠开关配置
- 创建右上角悬浮开关按钮,根据初始状态设置按钮颜色和文字
- 初始化 MutationObserver,优先监听
.chat-content区域的关键变化 - 添加防抖滚动事件监听和1秒定时巡检,实现全场景折叠触发
- 若为开启状态,立即执行一次全页面长文本折叠,确保初始状态整洁
- 监听页面卸载事件,触发销毁逻辑,清理所有监听器和定时器,防止内存泄漏
- 点击开关按钮时,切换运行状态并本地保存,关闭状态下停止所有折叠逻辑
常见问题
Q: 脚本没有自动折叠文本怎么办?
A:
- 检查右上角开关按钮是否为蓝色(开启状态),灰色表示已关闭,点击即可开启
- 确认当前页面 URL 是
https://www.qianwen.com/chat/*格式,非聊天页脚本不生效 - 打开浏览器控制台(F12)查看是否有报错信息,排查页面结构变化问题
- 刷新页面重试,或手动点击开关按钮切换状态后再次尝试
Q: 想展开长文本但点击没反应怎么办?
A:
这是正常现象,自动折叠开启状态下会屏蔽手动展开操作,解决方法:
- 点击页面右上角的悬浮按钮,将其从蓝色切为灰色(关闭自动折叠)
- 再点击长文本自身的「展开」按钮,即可正常展开文本
- 展开后若需重新开启折叠,再次点击右上角按钮切回蓝色即可
Q: 开关按钮遮挡聊天内容怎么办?
A:
- 找到脚本中
CONFIG配置里的BTN_POSITION参数,修改top和right值:BTN_POSITION: { top: 50, right: 20, zIndex: 9999 } // 按需调整数值,单位为px - 保存修改后刷新通义千问聊天页,按钮位置会同步更新
Q: 可以调整折叠触发的灵敏度吗?
A:
- 找到脚本中
CONFIG配置里的性能参数,按需修改:SCROLL_DEBOUNCE_MS: 200, // 数值越大,滚动折叠触发越迟钝,性能越好 POLL_INTERVAL_MS: 1500, // 数值越大,定时巡检频率越低,性能越好 - 建议根据设备配置调整,低配置设备可适当增大数值,高配设备可减小数值提升实时性
Q: 脚本会影响通义千问的原生功能吗?
A:
不会,脚本仅做长文本折叠的模拟点击操作,不修改通义千问的任何原生 DOM 结构和 JS 逻辑;
关闭自动折叠功能后,通义千问所有原生操作(包括文本展开、提问、回答等)均恢复正常,无任何干扰。
更新日志
v2.1
- 修复用户提问的最新问题并没有被折叠的问题
- 精简了日志
v2.0
- 🔄 架构重构:适配通义千问最新前端 DOM 结构,废弃旧类名匹配,改用
data-chat-list-key属性定位 - 🎯 状态判断优化:通过检测 SVG 元素的
qs-bottom-icon-svg-rotate类名精准判断折叠状态,更加稳定可靠 - 🌈 彩色日志系统:新增详细的彩色控制台日志输出,方便调试和监控脚本运行状态
- ⚡ 性能提升:优化选择器查询效率,减少不必要的 DOM 遍历
- 🛠️ 代码规范化:完善 CONFIG 注释,统一日志前缀,增强代码可维护性
v1.1
- 千问前端界面更新了,修改了 css 的类名
v1.0
- 🎉 初始版本:实现通义千问长文本核心自动折叠功能,精准匹配提问项文本
- ⚡ 高性能优化:缩小 DOM 监听范围、滚动事件防抖、延长巡检间隔,减少80%无用操作
- 🛡️ 内存安全:页面卸载时自动销毁所有监听器/定时器,彻底避免内存泄漏
- 💾 状态记忆:本地 localStorage 存储开关状态,刷新/重启浏览器自动恢复
- 🔘 可视化开关:右上角悬浮按钮,一键切换折叠状态,颜色+文字直观展示
- 🎯 精准匹配:仅针对提问项长文本生效,不干扰通义千问其他原生功能
- 📋 专属说明:适配折叠/展开交互逻辑,明确展开长文本的操作步骤
免责声明
本脚本仅供学习交流使用,请勿用于商业用途。脚本仅模拟人工点击折叠操作,未修改通义千问的任何核心功能和页面结构,使用脚本产生的一切后果由使用者自行承担。
反馈与支持
如果您在使用过程中遇到问题或有改进建议,请通过以下方式反馈:
- 在脚本管理器的脚本评论区留言
- 提交 Issue 到脚本仓库
- 反馈通义千问页面结构更新导致的脚本失效问题
温馨提示:
- 若通义千问更新页面结构(如类名、标签变化),可能导致脚本失效,请关注最新版本
- 建议定期清理浏览器本地存储,避免开关状态异常,确保脚本正常运行
- 低配置设备可适当增大性能参数数值,进一步提升页面运行流畅度
- 开启自动折叠后,若需临时展开某条长文本,关闭开关即可,操作完成后可重新开启