门户系统是通过window.open通过单点登录的模式打开子系统的,这就要求门户系统退出时,关闭所有打开的子系统。
平台处理这一问题的核心原理如下:
主窗口定义:
allChildWindows:[], //所有子窗口
pushChildWindow(childWindow){
this.allChildWindows.push(childWindow)
},
打开子系统时:
let winid=window.open(***)
this.pushChildWindow(winid)
退出时调用:
closeAllChildWindows() {
while (this.allChildWindows.length > 0) {
var childWindow = this.allChildWindows.pop();
// 检查窗口是否已关闭,避免在已关闭的窗口上调用close方法导致错误
if (!childWindow.closed) {
childWindow.close();
}
}
},