window.parent.postMessage 详细案例
时间: 2023-08-10 15:04:15 浏览: 119
`window.parent.postMessage` 是用于在嵌套的 iframe 中向父级窗口发送消息的方法。下面是一个详细的案例,演示了如何使用 `window.parent.postMessage` 进行跨域通信。
假设我们有一个父级页面(`parent.html`)和一个嵌套的 iframe(`child.html`),它们分别位于不同的域名下。
在 `parent.html` 中:
```html
<!DOCTYPE html>
<html>
<head>
<title>Parent Page</title>
</head>
<body>
<h1>Parent Page</h1>
<iframe src="http://child-domain.com/child.html" id="childFrame"></iframe>
<script>
// 监听来自 iframe 的消息
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event) {
// 确保消息来自特定域名
if (event.origin !== "http://child-domain.com") {
return;
}
console.log("Received message from child iframe: " + event.data);
// 在这里可以进行相应的处理逻辑
}
</script>
</body>
</html>
```
在 `child.html` 中:
```html
<!DOCTYPE html>
<html>
<head>
<title>Child Page</title>
</head>
<body>
<h1>Child Page</h1>
<script>
// 发送消息给父级页面
window.parent.postMessage("Hello from child iframe", "http://parent-domain.com");
</script>
</body>
</html>
```
在这个例子中,父级页面 `parent.html` 包含一个嵌套的 iframe,其中的 `src` 属性指向 `child.html`,并且指定了 `id` 为 `childFrame`。在父级页面的 JavaScript 中,我们使用 `window.addEventListener` 来监听来自 iframe 的消息。当收到消息时,我们检查消息的来源域名,确保它来自特定的域名(在这个例子中是 `http://child-domain.com`),然后进行相应的处理逻辑。
在子级页面 `child.html` 的 JavaScript 中,我们使用 `window.parent.postMessage` 发送消息给父级页面。第一个参数是要发送的消息内容,第二个参数是接收消息的页面的域名(在这个例子中是 `http://parent-domain.com`)。
通过这种方式,我们实现了从嵌套的 iframe 页面向父级页面发送跨域消息,并在父级页面中接收和处理这些消息。
请注意,为了安全考虑,需要在接收消息的页面中检查消息的来源域名,并且只接受来自特定域名的消息。这可以防止恶意代码发送虚假消息。
阅读全文