隐身模式下localStorage被禁用(抛SecurityError),sessionStorage仅内存驻留且关窗即清,IndexedDB启用内存后端,Cache API与Service Worker完全不可用。
隐身模式下,浏览器不会保存浏览历史、cookie、表单数据等本地痕迹,但它并非“无存储”,而是将三类关键存储机制转为内存驻留、会话级临时、关闭即销毁的状态。识别它们的生存状态,关键不是看“有没有”,而是看“存哪儿、何时删、能否观测”。
localStorage 与 sessionStorage:全部退化为内存快照
隐身模式中,localStorage 被完全禁用(调用时抛出 SecurityError),而 sessionStorage 仍可用,但其数据仅驻留在 RAM 中,不写入磁盘,且随窗口关闭彻底释放。可通过以下方式确认:
- 在控制台执行
localStorage.setItem('test', '1')→ 触发错误,说明 localStorage 已被策略性屏蔽 - 执行
sessionStorage.setItem('test', '1')→ 成功,但刷新后仍存在;关闭该隐身窗口再重新打开,sessionStorage.length为 0 - 使用 Chrome Task Manager(Shift+Esc)观察同一页面多次开闭时的内存占用波动,可间接反映 sessionStorage 数据的创建与瞬时释放
IndexedDB:启用但强制使用内存文件系统
Chrome 自 2021 年起在隐身模式中为 IndexedDB 启用独立的内存后端(in-memory backing store),所有数据库操作均发生在 RAM 中,不落盘。其生存特征包括:
- 首次打开隐身窗口时,
indexedDB.open('demo')可正常建立连接并读写 - 关闭并重开隐身窗口后,原数据库完全不可见(
indexedDB.databases()返回空数组) - 可通过配额检测验证:调用
navigator.storage.estimate(),隐身模式下quota通常 ≤ 120MB(源于内存文件系统硬限制),而常规模式可达数 GB
Cache API 与 Service Worker:完全禁用,无实例存活
隐身模式默认不注册、不激活、不运行任何 Service Worker,因此依赖它的 Cache API 无法初始化。这是最彻底的“不存在”状态:
- 执行
navigator.serviceWorker.register('./sw.js')→ 返回 rejected Promise,控制台提示 “Registration failed: The user is in incognito mode” - 即使 sw.js 文件存在且语法正确,
navigator.serviceWorker.controller始终为 null - 尝试
caches.keys()或caches.open('test')→ 抛出 TypeError 或返回 undefined,表明 Cache 存储子系统未挂载
这三种机制在隐身模式下的行为差异,本质是浏览器对“持久性承诺”的分级撤回:localStorage 彻底拒写,sessionStorage 限时保活,IndexedDB 迁移至内存沙箱,Cache+SW 则直接卸载运行时环境。识别它们,靠的不是文档描述,而是实测响应、错误类型和资源配额反馈。

















