在我的应用程序中,具有页面的用户可以打开一个弹出窗口。当用户单击注销时,它必须关闭弹出窗口。
我在Global.ts
类中将静态变量用于商店弹出窗口变量
public static QUICKTREND : any;
在打开弹出窗口的功能中,我将其存储了
this.quickWin = window.open(URL, 'QuickTrend', 'width=' + w + ',
height=' + h + ', left=' + x + ', top=' + y + ', location=no'+ ', status=no');
Constants.QUICKTREND = this.quickWin;
在logout()函数中,我弹出窗口并关闭
if(!isNullOrUndefined(Constants.QUICKTREND)){
let currentIframe = Constants.QUICKTREND;
currentIframe.close();
}
如果我没有刷新页面,它就可以正常工作。
但是当我刷新页面时,变量QUICKTREND重置为未定义。
我搜索了解决方案以在页面刷新时保留变量,只有解决方案可以保存到localStorage或sessionStorage。但是通过这种方式,我无法保存弹出窗口对象,因为它是DOM对象,Converting circular structure to JSON
错误显示。
localStorage.setItem("currentIframe", this.quickWin);
是否可以将弹出窗口保存到localStorage?
如果刷新页面,注销后如何关闭弹出窗口?
答案 0 :(得分:2)
您可以尝试以下代码:
app.component.ts
import { Component, HostListener } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'Angular-Experiment';
public myWindow;
private URL = 'https://www.google.com/';
@HostListener('window:beforeunload', ['$event'])
closeOnrefresh(event) {
console.log('closeOnrefresh', event);
if (this.myWindow && !this.myWindow.closed) {
this.myWindow.close();
}
}
openWindow() {
console.log("open window");
if (!this.myWindow || (this.myWindow && this.myWindow.closed)) {
this.myWindow = window.open(this.URL, 'self', 'width=1000,height=1000');
} else {
this.myWindow.focus();
}
}
Winfocus() {
console.log("Winfocus");
if (this.myWindow && !this.myWindow.closed) {
// this.myWindow.close();// to close
this.myWindow.focus();// to focus
}
}
Logout() {
console.log("WinLogout");
if (this.myWindow && !this.myWindow.closed) {
this.myWindow.close();// to close
}
}
}
app.component.html
<input type="button" value="Open" (click)="openWindow()">
<input type="button" value="focus" (click)="Winfocus()">
<input type="button" value="Logout" (click)="Logout()">