window.opener.postMessage
时间: 2023-10-20 18:09:15 浏览: 195
window.opener.postMessage 是一个 JavaScript 方法,用于在一个窗口中向另一个窗口发送消息。它通常用于在父窗口和子窗口之间进行通信。
使用该方法时,需要在发送消息的窗口中调用 window.opener.postMessage 方法,并传入要发送的消息和接收消息的窗口的 origin(源)。在接收消息的窗口中,需要监听 message 事件,并在事件处理程序中获取到发送的消息。
例如,在父窗口中向子窗口发送消息,可以使用以下代码:
```javascript
// 发送消息
window.open('child.html', 'child');
var childWindow = window.open('child.html', 'child');
childWindow.postMessage('Hello from parent!', 'http://localhost:8080');
// 接收消息
window.addEventListener('message', function(event) {
if (event.origin === 'http://localhost:8080' && event.source === childWindow) {
console.log('Received message from child:', event.data);
}
});
```
相关问题
window.open 和 window.opener 的详细解说
`window.open` 和 `window.opener` 是 JavaScript 中的两个常用的窗口操作方法和属性。
`window.open` 方法可以在新窗口或者标签页中打开一个指定的 URL。该方法的语法如下:
```javascript
window.open(url, windowName, [windowFeatures]);
```
其中,`url` 必选,表示要打开的 URL;`windowName` 可选,表示新窗口或标签页的名称;`windowFeatures` 可选,表示新窗口或标签页的特性,比如大小、位置、是否有工具栏等。该参数的格式为一个字符串,不同的特性之间用逗号隔开。
`window.opener` 属性表示打开当前窗口或标签页的窗口或标签页的 `window` 对象,它只有在当前窗口或标签页被其他窗口或标签页打开时才有值。可以通过该属性来实现窗口之间的通信,比如在子窗口中调用父窗口的函数或访问父窗口的变量。
需要注意的是,由于安全原因,浏览器禁止跨域访问其他窗口或标签页的内容。因此,如果要在两个不同域名的窗口或标签页之间通信,需要使用 postMessage 方法。
window.postMessage
window.postMessage是一种在不同窗口之间进行跨源通信的方法。它允许一个窗口向另一个窗口发送消息,以实现数据的传递和交互。使用postMessage时,需要指定目标窗口和消息内容,并可以选择指定目标窗口的地址。
具体用法如下所示:
otherWindow.postMessage(message, targetOrigin, [transfer]);
其中,otherWindow是目标窗口的window对象,message是要发送的消息内容,可以是字符串或对象,targetOrigin是接收消息窗口的地址,用于限制只有指定的窗口可以接收到消息,可选择为"*"表示无限制,transfer是可选参数,用于传输数据。
例如,在一个窗口中使用postMessage发送消息:
var win = window.opener ? window.opener : window.parent;
function sendMsg(){
var val = document.getElementById("msg").value;
if(win){
win.postMessage(val, "*");
}
}
在另一个窗口中,可以通过监听message事件来接收消息:
window.addEventListener("message", function(e){
document.getElementById("msg").value = e.data;
})
阅读全文