2011-11-16 82 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); 

这方式,我等待,直到子窗口准备就绪,我知道它,因为我的自定义变量已被定义。

相关问题