iframe postMessage 互相通信
时间: 2024-09-09 19:10:31 浏览: 43
iframe之间的postMessage通信允许嵌套页面之间交换数据,即使它们来自不同的源(即存在跨域限制)。下面是如何通过`postMessage`实现这种通信的一个简单示例:
1. **发送者**(通常为主页面)[^1]:
```javascript
// 获取iframe元素
let modelIframe: any;
document.getElementById('modelIframe').onload = function () {
modelIframe = window.frames['modelIframe'];
};
// 使用postMessage发送数据
modelIframe.contentWindow.postMessage(['37f1adba-6b8e-4c77-ab53-173bc7a15faf'], '*'); // 第二个参数为可接受来源,*表示任何源都可以接收
```
2. **接收者**(嵌入的iframe或子窗口):
```javascript
// 添加message事件监听器来捕获消息
window.addEventListener('message', (event) => {
// 检查消息是否来源于父页面
if (event.origin !== 'http://parent-domain.com') return;
// 处理接收到的数据
console.log(event.data);
sceneParse.selectObjects(event.data); // 假设sceneParse是一个函数,用于解析数据
}, false);
```
当主页面向iframe发送消息时,它会触发iframe上的`message`事件,从而执行回调函数并处理接收到的数据。
阅读全文