sessionstorage适合冷启动导览弹窗,因其数据仅限当前标签页、刷新保留、关闭即清空,满足单次会话内首次进入触发且不跨标签共享的需求。

用 sessionStorage 控制页面导览(Tour Guide)的“一次性冷启动弹窗”,适合**单次会话内只触发一次、关闭标签页即重置**的场景。它不跨窗口共享,也不持久留存,正符合“首次进入当前会话就引导,刷新页面不重复,换标签页可再引导”的需求。
为什么 sessionStorage 适合冷启动导览弹窗
sessionStorage 的生命周期与浏览器标签页(或窗口)绑定:
- 数据仅在当前标签页中存在,新开标签页或窗口是独立的 session;
- 页面刷新、路由跳转、前进后退均保留数据;
- 关闭该标签页后,数据自动清空,下次打开即为“新会话”;
- 无需服务端参与,无隐私风险,轻量可靠。
基础实现逻辑(无框架纯 JS)
核心思路:检查是否存在标记,不存在则显示导览并设标记;存在则跳过。
// 页面加载时执行
if (!sessionStorage.getItem('tourStarted')) {
showTourGuide(); // 启动你的导览组件(如 intro.js / driver.js / 自研高亮流程)
sessionStorage.setItem('tourStarted', 'true');
}
注意:不要用布尔值 true/false 直接存取,因为 getItem() 返回的是字符串或 null,建议统一用字符串标识(如 'true' 或 'done'),避免类型判断出错。
配合用户主动跳过或关闭行为
如果导览支持“跳过”、“关闭”、“稍后提醒”,需同步更新状态:
- 点击“跳过” → 立即调用
sessionStorage.setItem('tourStarted', 'skipped'),后续不再触发; - 点击“关闭”(X)→ 同样设为
'closed',并可加判断!== 'skipped' && !== 'closed'来区分意图; - 若需“稍后提醒”,可清除该项:
sessionStorage.removeItem('tourStarted'),下次刷新即重新触发。
多步骤导览中的进阶控制
若导览分步(如 Step 1 → Step 2 → …),可存储当前进度:
- 初始化:
sessionStorage.setItem('tourStep', '1'); - 每完成一步:
sessionStorage.setItem('tourStep', String(+step + 1)); - 恢复时读取:
const step = sessionStorage.getItem('tourStep') || '1',从对应位置继续; - 中途退出不重置,返回页面仍可续上,体验更连贯。
这种做法既保持了“会话内唯一启动”的冷启动特性,又提升了导览过程的容错性和延续性。











