postMessage:使用HTML5中的postMessage方法,可以实现不同窗口(甚至不同域名)之间的跨域通信。
时间: 2024-07-31 14:01:47 浏览: 65
`postMessage()` 方法是HTML5 Web Workers 和Window.postMessage API的一部分,它允许网页之间在同源策略限制下进行安全的消息传递,即使这些窗口属于不同的文档或不同的域名。以下是使用 `postMessage()` 进行跨域通信的基本示例:
1. **发送消息**:
在父窗口(通常为主页面)中,你可以这样发送消息到另一个窗口或iframe:
```javascript
// 主页面
window.parent.postMessage({ type: 'data', message: 'Hello from Parent'}, '*');
```
这里,`window.parent` 指向接收者窗口,`{ type: 'data', message: 'Hello from Parent' }` 是你要发送的数据,`'*'` 表示接受任意来源的消息。
2. **接收消息**:
在子窗口(如iframe或另一个弹出窗口)中,需要监听 `message` 事件来捕获并处理接收到的消息:
```javascript
// 子窗口或iframe
window.addEventListener('message', function(event) {
if (event.origin !== '*' && event.origin !== window.location.origin) return; // 只处理来自同一源或跨域的请求
console.log('Received message:', event.data);
});
```
3. **安全性注意**:
跨域通信时,要确保发送方和接收方有信任关系,因为`postMessage`默认只允许相同源或特定源(通过指定`event.origin`)的消息传递。如果你尝试从一个不信任的源发送消息,浏览器会阻止它。
阅读全文