SessionStorage 在嵌套 iframe 中默认隔离,同源 iframe 间不共享,跨域则完全不可访问;需通过 postMessage 显式通信或 URL 参数传递数据。

SessionStorage 在嵌套 iframe 中**默认是隔离的**,每个 iframe(只要来源相同)拥有独立的 sessionStorage 实例,即使它们同源且嵌套在同一个页面中。
同源 iframe 之间不共享 sessionStorage
即便父页面和子 iframe 都来自 https://example.com,它们的 sessionStorage 也是完全分开的。父页设置的键值不会自动出现在 iframe 里,反之亦然。这是浏览器的安全设计,保证上下文隔离。
- 父页面执行
sessionStorage.setItem('user', 'alice') - iframe 内执行
sessionStorage.getItem('user')→ 返回null - iframe 自己设的值,父页也读不到
跨域 iframe 的 sessionStorage 完全不可访问
如果 iframe 的 src 是不同源(如 https://other-site.com),不仅 sessionStorage 不共享,连读写操作都会被浏览器阻止(抛出 SecurityError)。这是同源策略的强制限制,无法绕过。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 尝试访问跨域 iframe 的 sessionStorage 会直接报错
- 不能通过 document.domain 或 postMessage 暴露 sessionStorage 内容本身
需要通信时,用 postMessage + 手动同步
若业务确实需要父子间传递 session 级数据(比如登录态),必须显式通信,不能依赖 sessionStorage 自动同步。
立即学习“Java免费学习笔记(深入)”;
- 父页可通过
iframe.contentWindow.postMessage(...)发送数据 - iframe 监听
message事件,收到后存入自己的 sessionStorage - 反过来,iframe 也可主动 postMessage 给父页,由父页存入自身 sessionStorage
- 注意验证
event.origin防止恶意消息
替代方案:优先考虑 URL 参数或顶层存储
对简单状态(如 token、用户 ID),更可靠的做法是:
- 把关键参数通过 URL query string 传给 iframe(如
<iframe src="page.html?token=abc">) - iframe 加载时解析 URL 并存入自己的 sessionStorage
- 或统一由顶层页面管理状态,iframe 仅通过 postMessage 获取所需字段

















