vue2获取window.open打开的指定其他页面的关闭事件
时间: 2024-09-20 15:07:16 浏览: 83
javascript window.open打开新窗口后无法再次打开该窗口问题的解决方法
5星 · 资源好评率100%
在Vue.js 2.x中,想要监听窗口`window.open()`打开的新页面并捕获其关闭事件,可以使用JavaScript的`addEventListener`方法来添加事件监听。但是需要注意的是,由于浏览器的安全限制,直接监听新窗口的关闭事件通常是不可行的,因为这涉及到跨域问题。
你可以尝试以下方法:
1. **通过查询历史记录**:如果新窗口是你应用的一部分,并且你知道它会有一个特定的历史记录条目,你可以定期检查这个条目的存在与否来推测窗口是否已经关闭。
```javascript
// 假设你有个变量保存新窗口的引用
let newWindow;
window.addEventListener('popstate', function() {
if (newWindow && !window.location.href.includes('/your/path')) { // 当前路径与预期不符时
console.log('新窗口已关闭');
// 在这里处理窗口关闭的逻辑
newWindow = null;
}
});
```
2. **利用iframe通信**:如果你有控制权去创建那个新窗口,并且两者在同一域名下,可以在它们之间建立一个iframe通道来传递消息,当新窗口关闭时,通知主窗口。
```javascript
newWindow = window.open('/new-page', '_blank', 'width=500,height=400');
// 创建一个在两个窗口间通信的函数
const sendMessageToNewWindow = (message) => {
const iframe = document.getElementById('communicationIframe');
if (iframe.contentWindow) {
iframe.contentWindow.postMessage(message, '*');
}
}
// 新窗口关闭时发送关闭信号
newWindow.onunload = function() {
sendMessageToNewWindow('window-closed');
};
// 主窗口监听来自新窗口的消息
window.addEventListener('message', function(event) {
if (event.origin === 'http://yourdomain.com') {
if (event.data === 'window-closed') {
console.log('新窗口已关闭');
newWindow = null;
}
}
}, false);
```
请注意,这些方法都可能存在兼容性和性能问题,而且并不是标准做法。最好的解决方案是尽量避免在用户无感知的情况下打开新窗口,除非你能确保有更好的交互机制来同步状态变化。
阅读全文