智能跳转
AI-SideChat 的智能跳转功能可以让你从收藏列表快速定位回原始对话上下文。本文档详细介绍跳转功能的原理和使用方法。
功能概述
点击悬浮坞中的任意收藏条目,系统会自动:
- 打开对应的对话页面
- 精准定位到收藏的问题位置
- 高亮显示目标问题
- 滚动到可视区域
跳转模式
软导航 (Soft Navigation)
当你已经在对话页面时,系统会尝试软导航:
- 优点:速度快,不刷新页面
- 适用:SPA 应用内部路由切换
- 实现:通过修改 URL 和触发页面内部导航
硬跳转 (Hard Jump)
当软导航失败或不在对话页面时:
- 方式:强制跳转到目标 URL
- 效果:页面会刷新
- 保证:100% 能打开目标页面
三层定位策略
策略 A:索引精准命中 + Hash 校验
最优策略,速度最快:
- 根据
bubbleIndex直接定位到目标索引 - 验证该位置问题的哈希值
- 如果匹配,定位成功 ✅
javascript
const targetBubble = userBubbles[bubbleIndex]
if (simpleHash(targetBubble.innerText) === questionHash) {
// 定位成功
scrollToElement(targetBubble)
}策略 B:Hash 全局搜索
容错策略,当索引不匹配时:
- 遍历所有用户提问气泡
- 计算每个问题的哈希值
- 找到匹配的问题
javascript
for (let i = 0; i < userBubbles.length; i++) {
if (simpleHash(userBubbles[i].innerText) === questionHash) {
// 找到匹配的问题
scrollToElement(userBubbles[i])
return
}
}适用场景:
- 对话中插入了新问题
- 对话中删除了部分问题
- 索引位置发生偏移
策略 C:索引强制兜底 (Fuzzy Fallback)
最后兜底,确保总能定位:
- 直接跳转到索引位置
- 不验证内容是否匹配
- 至少能定位到附近
javascript
const targetBubble = userBubbles[bubbleIndex] || userBubbles[userBubbles.length - 1]
scrollToElement(targetBubble)跳转流程
完整流程图
点击收藏条目
↓
检查当前页面
↓
是否在目标对话?
├─ 是 → 软导航
│ ↓
│ 等待页面更新
│ ↓
└─ 否 → 硬跳转
↓
等待页面加载
↓
执行定位策略
↓
策略 A:索引+Hash
↓ 失败
策略 B:Hash 搜索
↓ 失败
策略 C:索引兜底
↓
高亮显示
↓
完成 ✅高亮效果
视觉反馈
定位成功后,目标问题会:
- 背景高亮:紫色背景 (
#8850e5) - 持续时间:2 秒
- 动画效果:淡入淡出
css
.ai-clip-highlight {
background-color: rgba(136, 80, 229, 0.2) !important;
transition: background-color 0.3s ease;
}滚动行为
javascript
element.scrollIntoView({
behavior: 'smooth',
block: 'center'
})- 平滑滚动:视觉体验更好
- 居中显示:目标始终在屏幕中央
跨页状态保持
sessionStorage 机制
系统使用 sessionStorage 保存跳转信息:
javascript
sessionStorage.setItem('aiClip_pendingJump', JSON.stringify({
questionHash: '123456',
bubbleIndex: 2,
timestamp: Date.now()
}))页面加载后恢复
javascript
window.addEventListener('load', () => {
const pendingJump = sessionStorage.getItem('aiClip_pendingJump')
if (pendingJump) {
const { questionHash, bubbleIndex } = JSON.parse(pendingJump)
performJump(questionHash, bubbleIndex)
sessionStorage.removeItem('aiClip_pendingJump')
}
})平台适配
Gemini
选择器:
javascript
const userBubbles = document.querySelectorAll('user-query')特点:
- 使用自定义元素
- 动态渲染内容
ChatGPT
选择器:
javascript
const userBubbles = document.querySelectorAll('[data-message-author-role="user"]')特点:
- 使用 data 属性
- 虚拟滚动优化
故障排除
定位不准确
问题:跳转后位置不对
原因:
- 对话内容已变化
- 索引位置偏移
解决:系统会自动尝试 Hash 搜索
无法跳转
问题:点击后无反应
原因:
- URL 无效
- 权限问题
解决:
- 检查收藏的 URL
- 确保已登录 AI 平台
页面刷新后定位失败
问题:硬跳转后没有自动定位
原因:
- sessionStorage 未保存
- 页面加载监听器失败
解决:
- 刷新页面重试
- 检查浏览器控制台
