父页 → 子页 {action:"sync"}
子页 → 父页 origin="null" ✓ 已校验

PostMessage 跨域调试器

右侧是一个 sandbox iframe 沙箱子页面,左侧代表父页面:填好消息类型与 JSON payload 即可双向收发演示,日志控制台逐条记录方向、targetOrigin、event.origin 与数据内容,实时校验 JSON 合法性并提示 targetOrigin="*" 的安全风险。全程本地运行,不依赖外部域名。

父页 PARENT发送消息到子页

payload 必须是合法 JSON(结构化数据是最佳实践,避免传字符串再 eval)。

⚠ 注意:targetOrigin 填字符串 "null" 会直接抛 Invalid target origin —— 它只能是合法 URL 或 *。本演示选 * 是沙箱必需;生产环境携带 token / 用户数据时严禁星号广播,必须写精确 origin。

子页 IFRAMEsandbox="allow-scripts"

子页面运行在不透明源(origin=null):它收消息后会校验来源并自动回执;也可手动回复父页。

日志消息收发控制台

扩展场景预设 · 分步时间轴 · 字段解释

点选场景会自动填入上方 type、payload 与 targetOrigin;下方时间轴按消息投递顺序分步演示,序列图逐帧高亮。时间轴为概念演示,实际收发请用上方「发送 → 子页」。

分步时间轴 0 / 4

序列图 · 自绘 SVG

实线箭头为已投递消息,虚线为尚未发生的步骤;箭头方向即 data 流向。

MessageEvent 字段解释

字段含义安全用法
event.data发送方传入的第一个参数,经结构化克隆的副本;函数、DOM 节点会抛 DataCloneError只传可序列化数据,收到后按约定 schema 校验
event.origin发送方源(scheme + host + port);sandbox 未开 allow-same-origin 时是字符串 "null"与白名单精确比对,不要用 includes 模糊匹配
event.source发送方 window 的引用,可用于区分具体是哪个 iframe与记录的 contentWindow 比对,双重校验来源
event.ports随消息转移的 MessagePort 数组,可建立独立双向通道用完及时 close,避免长期占用
event.type监听的事件名,message 事件固定为 "message"同窗口多业务时在 data 里加 type 字段区分
targetOrigin发送方参数,限定接收方 origin;"*" 表示不限接收方携带 token/用户数据时必须写精确 origin

方案管理 · 数值对比 · 导出

调好的参数可存成方案随时载入,也能生成可分享链接;结果里的数值列会自动画成对比图,并支持导出 CSV / JSON。

最近方案 暂无

📡口径说明与常见误填

sandbox iframe 模拟异源,双向收发日志可查

沙箱演示
右侧 sandbox iframe 加 srcdoc 模拟"另一个源"的子页面,无需两个域名。
双向收发
父发子、子自动回执,日志逐条记录方向、targetOrigin、event.origin 与数据。
JSON 校验
payload 必须是合法 JSON,非法内容即时提示,避免传字符串再 eval。
风险提醒
targetOrigin 选星号时出现内联风险条:消息可被任意嵌入方读取。
不透明源
sandbox 未开 allow-same-origin 时子页 origin 为 null,正好演示最常见的来源不匹配。

这个工具解决什么问题

postMessage"发了收不到、能收不敢信",多半是 origin 在作怪。本工具用 sandbox iframe 模拟一个来自"另一个源"的子页面:填消息类型与 JSON payload 即可双向收发演示,日志控制台逐条记录方向、targetOrigin、event.origin 与数据内容,实时校验 JSON 并提示 targetOrigin 星号的安全风险,全程本地运行,可直接当调试模板抄。

三条安全守则

① 接收必校验 origin:handler 里先核对 event.origin 白名单再处理数据,跳过这步就是安全漏洞。

② targetOrigin 精确写:发送方不知道对方来源才写星号,携带 token 或用户数据的消息严禁用星号广播。

③ 等子页就绪再发:iframe onload 之前发送是"消息丢失"最常见原因,先等子页就绪回执再投递业务数据。

怎么用

  1. 第 1 步 · 填消息类型与数据
    输入 type 与 JSON payload,右侧沙箱子页面已就绪待收。
  2. 第 2 步 · 选 targetOrigin 发送
    星号 * 是沙箱不透明源唯一合法投递值(弹出风险条);选本站精确 origin 可演示"来源不匹配、消息被静默丢弃"。
  3. 第 3 步 · 看子页自动回执
    子页校验来源后自动回消息给父页,双向链路日志可见。
  4. 第 4 步 · 复盘日志
    日志逐条记录方向、origin 与数据,复制日志对照排查自己项目的代码。

更新记录

  • v1.0 2026-11-02
  • 2026-11-02 上线首个版本
  • 2026-11-02 新增 targetOrigin 风险条与日志复制

常见问题

postMessage 怎么用做跨域通信?
接收方先给 window 加 message 事件监听;发送方调用 iframe.contentWindow.postMessage 传数据与目标 origin(父发子),或 parent.postMessage(子发父)。handler 里务必校验 event.origin 白名单,本页日志面板演示了完整收发链路。
targetOrigin 填星号有什么风险?
星号表示不管接收方换成哪个页面都发,若 iframe 的 src 被劫持或替换成恶意页,携带 token、用户信息的消息会被直接读走。生产环境写精确 origin;本页选星号时会出现内联风险条提醒。
iframe 父子页面传数据还有什么方法?
同源时可直接访问 contentWindow 或 window.parent 的 DOM;跨域只有 postMessage 是标准方案(name 透传、location.hash 轮询均已过时)。微前端场景也可用 CustomEvent 加共享 window 或库传 props,但底层跨 iframe 仍是 postMessage。
postMessage 收不到消息的常见原因?
按序排查:① iframe 尚未加载完就发送;② targetOrigin 与接收方实际 origin 不匹配(sandbox 不指定 allow-same-origin 时是 null,见本页演示);③ 监听器绑在错误的 window 上;④ 数据含不可结构化克隆的对象(函数、DOM)导致抛 DataCloneError。
有没有跨域通信在线演示?
本页即演示:无需两个域名,用 sandbox iframe 加 srcdoc 模拟另一个源的子页面,父子双向收发、origin 校验、JSON 校验、日志追踪全部在线完成,可直接当调试模板抄。

💬 留言板 0

全部留言需审核通过后展示
💬

还没有留言,来抢沙发吧!

✍️ 说点什么
0 / 500
图形验证码
👣 做完这一步,顺便看看
🏛️ 凯撒密码解密 凯撒密码解密 :1~25 位位移加解密、ROT13 一键转换… → 🔤 乱码转换器在线修复 乱码转换器在线 :把“锟斤拷”“�”“涓枃”“😀”等乱… → 📸 代码截图美化工具 在线代码转图片工具:粘贴或输入代码(支持 JavaScrip… → 🎨 WCAG 对比度检测工具 在线颜色对比度检测工具:输入前景文字色与背景色(支持 #he… →
全部工具 →