我需要打开一个弹出窗口,然后关闭弹出窗口(刷新父页面)
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。
答案 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>