2013-02-28 122 views
1

我有這個子窗口和一個條件,當窗口仍然打開並且變量'myStatus'等於'處理'時,如果'send'被再次單擊,則防止窗口重新加載。問題是如果打開子窗口,然後刷新父頁面並再次單擊「發送」,childPage變量將丟失,並允許子頁面重新加載。有沒有解決這個問題的方法?謝謝。停止子窗口重新加載,即使父窗口已重新加載

var childPage = null; 

$('#send').click(function(){ 

    if(childPage && !childPage.closed && childPage.myStatus == "processing"){ 
     alert('child window is open and processing'); 
    }else{ 
    childPage = window.open("test.html","send","width = 300,height=300"); 
}): 
+0

正在停止從重新加載選項parentpage?您可以在父頁面上使用'onbeforeunload'來有條件地檢查'childPage.myStatus =='處理'' – 2013-02-28 19:02:17

+0

感謝您的建議,但沒有,實際上頁面作爲孩子打開的全部原因是爲用戶提供選項瀏覽子頁面時正在處理 – user2014429 2013-02-28 19:09:42

回答

3

我有同樣的問題

我使用雙向通信

,如果用戶刷新父頁面將此信息發送到子窗口解決。 子窗口將運行一個計時器,它將繼續檢查父頁面是否重新加載。 一旦父頁面重新加載創建父子窗口的參考

代碼:

在parentWindow

window.onbeforeunload =function(){ 
    childPage.reconnect(); 
} 

window.saveChildReference =function (ref){ 
    childPage = ref; 
} 

在子窗口

window.reconnect = function(){ 
    var i =0; 
    var timer = setInterval(function(){ 
    i++; 
     if(window.opener && window.opener.saveChildReference){ 
       window.opener.saveChildReference(window); 
      clearTimeout(timer); 
     } 

     if(i > 100){ 
     clearTimeout(timer);// stop trying as parent may be closed. 
     } 

    }, 100); 

}; 
+0

一個奇妙的解決方案,謝謝你分享你的經驗:) – user2014429 2013-02-28 19:13:38