parent.window. window.opener. 区别
时间: 2023-09-27 12:06:59 浏览: 65
这两个对象都是 JavaScript 中的窗口对象,但它们之间有一些区别,具体如下:
1. `parent.window`:表示当前窗口的父窗口,如果当前窗口没有父窗口,则返回当前窗口自身。
2. `window.opener`:表示打开当前窗口的父窗口,如果当前窗口不是通过 `window.open()` 打开的,则返回 `null`。
需要注意的是,由于安全限制的原因,访问 `parent.window` 或 `window.opener` 对象可能会受到限制。如果两个窗口不在同一个域中,那么访问这两个对象可能会抛出安全错误。
相关问题
window.opener和window.parent
`window.opener` 和 `window.parent` 都是 JavaScript 中的 window 对象的属性。
- `window.opener` 属性引用打开当前窗口的窗口(即父窗口)的 window 对象。如果当前窗口是由其他窗口通过 JavaScript 打开的,则该属性返回该窗口的 window 对象。如果当前窗口不是由其他窗口打开的(例如,用户直接在浏览器中打开了窗口),则该属性返回 null。
- `window.parent` 属性引用当前窗口的父窗口的 window 对象。如果当前窗口没有父窗口(例如,当前窗口是顶级窗口),则该属性返回当前窗口的 window 对象。
通常情况下,`window.opener` 和 `window.parent` 属性主要用于在子窗口和父窗口之间进行通信和交互,例如在子窗口中调用父窗口的函数或者在父窗口中访问子窗口的 DOM 元素。
window.opener.postMessage
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);
}
});
```