角度2+检测关闭的窗口



构建完成后,我在检测到一个关闭的窗口时遇到问题。

const newWindow = window.open(url, '_blank', options);
newWindow.onbeforeunload = () => null;
newWindow.addEventListener('beforeunload', (evt: BeforeUnloadEvent) => 
{
console.log(evt)
}
);

在我完成构建之前,它的工作效果很好,在那里,beforeunload事件不会被触发。我还尝试在新窗口的组件中放置一个主机侦听器

@HostListener('window:beforeunload', [ '$event' ])
beforeUnloadHander(event: BeforeUnloadEvent): void {
debugger;
}

但这里也有同样的问题。构建完成后,我们不再到达调试器

有人知道我做错了什么吗?谢谢你的帮助!

编辑解决方案

const heartBeatNewWindow = setInterval(() => {
if (newWindow.closed) {
this.canvasSettings.displayInNewWindow = false;
clearTimeout(heartBeatNewWindow);
}
}, 1500);

我不得不做一些类似的事情,我的方法如下:我在服务的构造函数中从关闭事件窗口创建了一个通用catch,它们调用处理此事件的方法。在这个方法中,我验证这个事件的起源是否正确,以执行我需要的逻辑。看看这个例子:

构造函数内部:

if(window.addEventListener){
window.addEventListener("message", this.authService.handleMessage.bind(this), false);
}else{
(<any>window).attachEvent('onmessage', this.authService.handleMessage.bind(this));
}

以及我处理该事件的方法:

handleMessage(event: Event) {
event.preventDefault();
const message = event as MessageEvent;
// Only trust messages from the below origin.
//
if ((message.origin !== environment.BASE_URL)) return;
const result = JSON.parse(message.data);
//Add your logic here

我希望你能帮上忙。

相关内容

  • 没有找到相关文章

最新更新