2015-11-04 173 views
1

我有一段代碼在外部窗口中啓動另一個頁面。關閉f5刷新子窗口

var myOpenWindow = window.open(...); 

我在整個應用程序生命週期中管理此窗口,一旦論壇完成,我的管理狀態關閉此窗口。

但是,我面臨的問題是,如果用戶點擊f5進行硬刷新,窗口在加載主頁面後仍然打開。

起初我以爲我可以覆蓋window.open來跟蹤我的應用程序打開的窗口在全局變量中的狀態。但是,我忽略了一個事實,即在f5重置我的全局丟失。

這似乎是一個簡單的問題,但解決方案已經迴避了我。無論如何要關閉父母刷新時打開的窗口window.open

+1

您應該能夠使用卸載事件。見例如http://stackoverflow.com/questions/26324954/close-all-child-windows-when-parent-window-is-closed –

+1

你可以將你的全局變量存儲在cookie或存儲中而不是關閉窗口 – rafaelcastrocouto

+0

試試從bootstrap使用模式窗口。只要您關閉或重新加載頁面,它將關閉 – kasynych

回答

1
var myOpenWindow = window.open(...); 
window.onunload = function(){myOpenWindow.close()}; 

或更好

window.addEventListener('unload',function(){myOpenWindow.close()}) 

應該這樣做。

MDN: WindowEventHandlers.onunload

+0

謝謝,那正是我所需要的。 – Freddy

0

也許你可以使用一個DIV,並將其放置在屏幕的中央。添加一些jQueryUI魔法,你不必擔心彈出窗口或攔截器或其他東西。

+0

我寧願在'JQuery.dialog'中做到這一點,它只是在工作中沒有選擇。 – Freddy

0

你可以保持窗口打開,用下面的代碼:

當你重新加載父頁面,孩子會改變myOpenWindow當父頁面將被載入。

父窗口:

function detectChild(child) { 
    myOpenWindow = child; 
    //opener.actionWhenOpen(); 
} 

var myOpenWindow = window.open(...); 

window.onunload = function() { 
    if (myOpenWindow) { 
     myOpenWindow.refreshParent(); 
    } 
}; 

子窗口:

if (opener) { 
    //opener.actionWhenOpen(); 
    opener.onunload = function() { 
     if (opener && opener.myOpenWindow) { 
      opener.myOpenWindow.refreshParent(); 
     } 
    }; 
} 

function refreshParent() { 
    this.i = ((this.i) ? this.i : 0)+1; 
    var i = this.i; 
    setTimeout(function() { 
     if (!opener) { 
      return console.log("Opener closed."); 
     } else if (opener.detectChild && !opener.myOpenWindow) { 
      this.i = 0; 
      opener.detectChild(window); 
     } else if (i < 900) { 
      console.log("Opener cheked("+i+")."); 
      refreshParent(i++); 
     } 
    }, 50); 
}