同源时可通过 iframe.contentwindow 直接操作 dom;跨域必须用 postmessage 通信,需验证 origin、检查 contentwindow 是否存在,并对 data 做类型校验以防 xss。
要操作 iframe 内容或与其中页面通信,核心前提是满足同源策略(same-origin policy)——只有同协议、同域名、同端口时,父页面才能直接访问 iframe 的 dom 或调用其方法;跨域则必须借助 postmessage 进行安全通信。
获取 iframe 的 window 和 document 对象(同源时)
当 iframe 与父页面同源,可通过 iframe.contentWindow 获取其全局对象,再通过 .document 访问 DOM:
- 确保 iframe 已加载完成(监听
load事件),否则contentDocument可能为null - 推荐用
iframe.contentWindow.document,兼容性比contentDocument更好 - 可直接执行查询、修改样式、绑定事件等操作,例如:
iframe.contentWindow.document.getElementById("btn").click();
向 iframe 发送消息(跨域或同源通用)
postMessage 是唯一被广泛支持的跨域通信方式,父页面调用 iframe 的 contentWindow.postMessage():
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 第一个参数是任意可序列化的数据(字符串、对象、数组等)
- 第二个参数是目标源(origin),建议写具体域名(如
"https://example.com"),避免用"*"增加安全风险 - 发送前检查
iframe.contentWindow是否存在,防止 iframe 未加载或被移除
在 iframe 内接收并响应消息
iframe 页面需监听 message 事件,并验证来源以保障安全:
- 通过
event.origin核对发送方域名,拒绝非法来源 - 使用
event.source可向父页面回传消息(event.source.postMessage(...)) - 建议对
event.data做类型校验(如typeof event.data === 'object'),避免意外错误
父页面监听 iframe 的消息回传
父页面同样需监听全局 message 事件,并区分消息来源:
- 可用
event.source === iframe.contentWindow确保只处理该 iframe 的响应 - 结合自定义消息结构(如带
type字段)实现多用途通信,例如:{ type: "READY", data: { width: 800 } } - 注意:不要在未验证 origin 的情况下执行
eval或插入 HTML,防止 XSS
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










