2011-11-16 79 views
4

工作,我需要打開一個彈出窗口,然後關閉後彈出窗口(刷新父頁)的JavaScript「beforeunload」事件不是在IE

jQuery的「beforeunload」事件在Internet Explorer 8中無法正常工作,9。

我的代碼是:

/* 
    * events 
    * add tallyman 
    */ 
$("div.main form div.tallymanlist").click(function() { 
    if(gencargo.show_confirm('Add new tallyman?')) { 
     var windowObject = gencargo.windowOpener(600,1400, "Tallyman",$(this).children().attr("url")); 
     gencargo.windowParentRefresh(windowObject); 
    } 
}); 

gencargo對象是內容(窗口打開):

/* 
    * open window 
    */ 
    windowOpener : function (windowHeight, windowWidth, windowName, windowUri) { 
     var centerWidth = (window.screen.width - windowWidth)/2; 
     var centerHeight = (window.screen.height - windowHeight)/2; 

     newWindow = window.open(windowUri, windowName, 'resizable=0,width=' + windowWidth + 
      ',height=' + windowHeight + 
      ',left=' + centerWidth + 
      ',top=' + centerHeight); 

     newWindow.focus(); 
     return newWindow; 
    }, 

,也窗口關閉:

windowParentRefresh : function(object) { 

     $(object).bind('beforeunload', function() { 
      object.opener.location.reload(); 
     }); 
    } 

關閉窗口事件不工作即。只有在FireFox,Chrome,Opera。

+0

是的。我試過了。但它仍然不工作,即ie – Dezigo

+0

它似乎可以在IE 9上正常工作,但IE 8(IE 8在IE 8模式下)無法正常工作。 http://jsfiddle.net/DQfMH/ –

回答

2

試試這個:

/* 
    * reload page 
*/ 
    windowParentRefresh: function(object) { 

      setTimeout(function() { 
       setTimeout(function() { 
      $(object).bind('beforeunload', function() { 
       object.opener.location.reload(); 
      }); 
       }, 1000); 
      },1); 

    } 
+0

oo thx !超時...真棒..我不知道它是如何工作的,但它的工作原理! – Dezigo

+0

請發表解釋或鏈接以解釋爲什麼添加超時將解決原始問題。 –

-1

jQuery API專門說不綁定到beforeunload,而是直接綁定到window.onbeforeunload。

<script type=」text/javascript」> 

window.onbeforeunload = askUser ; 

function askUser(){ 
    return "Do you wanna quit?"; 

} 
</script> 
+0

讀:http://stackoverflow.com/questions/1889404/jquery-ui-dialog-onbeforeunload – jmav

+0

windowParentRefresh:函數(對象){ \t \t \t object.onbeforeunload =函數(){ \t \t \t \t object.opener.location.reload(); \t \t \t}; \t \t}我想這一點,仍然沒有工作即即:( – Dezigo

+0

windowParentRefresh:函數(對象){ \t警報( '封閉!!'); \t object.onbeforeunload =函數(){ \t \t object.opener 。location.reload(); \t}; }。我看到一個提醒,在我的頁面還沒有加載之前(在ie中),但是在關閉之後它不能正常運行 – Dezigo

1

我知道這個問題是超過五十歲,但我最近不得不解決同樣的問題。我使用這個代碼只是使用jQuery 3.1.1精在Chrome,火狐,Safari,歌劇:

var myWindow = window.open(...); 
$(myWindow).on('beforeunload', function() { 
    ... 
}); 

這並沒有對IE 11的工作不過。我相信原因是事件綁定是不可能的,直到子窗口完成加載。當我在$().on行上設置了一個斷點後,我發現它發生了變化。打破那裏給了子窗口它需要加載的時間。

這裏是我如何解決它: 在子窗口的代碼,我加入這一行:

$(document).ready(function() { 
    window.childWindowReady = true; 
}); 

然後在我的父窗口,我用這個代碼:

var myWindow = window.open(...), 
    windowCheckInterval = setInterval(function() { 
     if (myWindow.childWindowReady) { 
      $(myWindow).on('beforeunload', function() { 
       ... 
      }); 
      clearInterval(windowCheckInterval); 
     } 
    }, 500); 

這方式,我等待,直到子窗口準備就緒,我知道它,因爲我的自定義變量已被定義。

相關問題