JavaScript'onbeforeunload'事件无效

时间:2011-11-16 13:23:11

标签: javascript jquery

我需要打开一个弹出窗口,然后关闭弹出窗口(刷新父页面)

jquery'afterunload'事件在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();
      });
    }

关闭窗口事件在ie中不起作用。仅适用于FireFox,Chrome,Opera。

3 个答案:

答案 0 :(得分:3)

试试这个:

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

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

     }

答案 1 :(得分:2)

我知道这个问题已经超过五年了,但我最近不得不解决同样的问题。我使用jQuery 3.1.1在Chrome,Firefox,Safari,Opera中使用此代码:

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);

这样,我等到子窗口准备好了,我就知道了,因为我的自定义变量已经定义了。

答案 2 :(得分:-1)

jQuery API明确表示不要绑定到beforeunload,而是直接绑定到window.onbeforeunload。

<script type=”text/javascript”>

window.onbeforeunload = askUser ;

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

}
</script>