Skip to content

跨页面与 iframe 通信

同源多 Tab / 窗口

同源下可用 localStorage / sessionStorage 事件storage 事件)同步简单数据;复杂协作仍建议走服务端或专门频道。


postMessage(跨源通用)

用于 窗口与 opener父页与 iframeWeb Worker 等消息传递;跨域时 必须校验 event.origin,且 targetOrigin 勿滥用 * 发送敏感数据。

js
// 父页 → 子 iframe
iframe.contentWindow.postMessage({ type: 'ping' }, 'https://child.example');

// 接收
window.addEventListener('message', (e) => {
  if (e.origin !== 'https://child.example') return;
  console.log(e.data);
});

由脚本 window.open 打开的页面也可用 postMessage 回传;需等待子页加载完成再发(如 load 事件后)。


iframe

跨域 iframe 无法直接互读 DOM,postMessage 是标准跨域通信方式。同域则可访问 contentWindow.document(仍需谨慎 XSS)。


小结

跨上下文通信:同源优先明确边界;跨源 postMessage + origin 白名单;敏感操作配合 服务端会话,勿仅靠前端互传密钥。