跨域生成的iframe,怎么通过postMessage API来进行通信?当iframe被点击时,发送消息到主页面的Javascript处理?
时间: 2024-10-11 09:04:33 浏览: 31
详解使用postMessage解决iframe跨域通信问题
5星 · 资源好评率100%
跨域的iframe之间通信需要利用`postMessage` API,这是浏览器提供的安全机制,允许一个文档从另一个文档发送数据。以下是实现过程:
1. **在iframe内触发事件并发送消息**:
当iframe内的某个元素被点击时(例如,`<button>`或其他可交互元素),可以在`click`事件回调中调用 `postMessage` 函数,将事件信息发送给父窗口:
```javascript
document.getElementById('clickableElement').addEventListener('click', function() {
window.parent.postMessage({ action: 'click', data: { source: 'iframe', id: this.id } }, '*');
});
```
2. **在主页面接收并处理消息**:
主页面需要监听`message`事件,并检查消息来源是否是你期望的iframe。然后,根据消息内容做相应的处理:
```javascript
window.addEventListener('message', function(event) {
if (event.origin !== '*' && !event.origin.includes(location.host)) return;
if (event.data.action === 'click') {
console.log(`Received click from iframe with ID: ${event.data.source}`, event.data);
// 对接收到的数据进行进一步的操作,如更新UI等
}
}, false);
```
使用`parent`关键字是为了指向包含iframe的窗口,而不是当前窗口。
阅读全文