问题几乎都在标题中。
是否有可能(以及如何?)使用 javascript 打开弹出窗口,然后检测用户何时关闭它?
我在项目中使用 jquery,所以 jquery 解决方案会很好。干杯!
问题几乎都在标题中。
是否有可能(以及如何?)使用 javascript 打开弹出窗口,然后检测用户何时关闭它?
我在项目中使用 jquery,所以 jquery 解决方案会很好。干杯!
如果您可以控制弹出窗口的内容,请在unload
那里处理窗口的事件并通过opener
属性通知原始窗口,首先检查打开程序是否已关闭。请注意,这在 Opera 中并不总是有效。
window.onunload = function() {
var win = window.opener;
if (!win.closed) {
win.someFunctionToCallWhenPopUpCloses();
}
};
由于unload
每当用户离开弹出窗口中的页面时都会触发该事件,而不仅仅是在窗口关闭时,您应该检查弹出窗口是否实际关闭someFunctionToCallWhenPopUpCloses
:
var popUp = window.open("popup.html", "thePopUp", "");
function someFunctionToCallWhenPopUpCloses() {
window.setTimeout(function() {
if (popUp.closed) {
alert("Pop-up definitely closed");
}
}, 1);
}
如果您无法控制弹出窗口的内容,或者您的目标浏览器之一不支持该unload
事件,则您只能在主窗口中使用某种轮询解决方案。调整间隔以适应。
var win = window.open("popup.html", "thePopUp", "");
var pollTimer = window.setInterval(function() {
if (win.closed !== false) { // !== is required for compatibility with Opera
window.clearInterval(pollTimer);
someFunctionToCallWhenPopUpCloses();
}
}, 200);
您的问题有一个非常简单的解决方案。
首先创建一个新对象,它将像这样打开一个弹出窗口:
var winObj = window.open('http://www.google.com','google','width=800,height=600,status=0,toolbar=0');
为了知道此弹出窗口何时关闭,您只需使用如下循环继续检查:
var loop = setInterval(function() {
if(winObj.closed) {
clearInterval(loop);
alert('closed');
}
}, 1000);
现在您可以用您想要的任何 javascript 代码替换警报。
玩得开心!:)
尝试查看unload
和beforeunload
窗口事件。监视这些应该让您有机会在窗口关闭时通过以下方式在 DOM 卸载时回调:
var newWin = window.open('/some/url');
newWin.onunload = function(){
// DOM unloaded, so the window is likely closed.
}
如果您可以使用jQuery UI Dialog,它实际上有一个close
事件。
要打开一个新窗口调用:
var wnd = window.open("file.html", "youruniqueid", "width=400, height=300");
如果您只想知道该窗口何时关闭,请使用onunload
.
wnd.onunload = function(){
// do something
};
如果您想在关闭它之前得到用户的确认,请使用onbeforeunload
.
wnd.onbeforeunload = function(){
return "are you sure?";
};