JavaScript & # 39; beforeunload& # 39;事件不能在ie中工作

JavaScript 'beforeunload' event not working in ie

本文关键字:ie 工作 beforeunload JavaScript 事件 不能      更新时间:2023-09-26

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

jquery 'beforeunload'事件在ie8、ie9中不工作。

我的代码是:
 /*
  * 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

试试这个:

 /*
  * reload page
 */
     windowParentRefresh: function(object) {
          setTimeout(function() {
              setTimeout(function() {
            $(object).bind('beforeunload', function() {
                object.opener.location.reload();
            });
              }, 1000);
          },1);
     }

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

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

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

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

<script type=”text/javascript”>
window.onbeforeunload = askUser ;
function askUser(){
  return "Do you wanna quit?";
}
</script>