? ? ? ?門戶系統是通過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();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? },