Pab*_*blo 66 javascript jquery popup
问题几乎全在标题中.
是否可以(以及如何?)使用javascript打开弹出窗口,然后检测用户何时关闭它?
我在项目中使用jquery,所以jquery解决方案会很好.干杯!
Tim*_*own 91
如果您可以控制弹出窗口的内容,请在unload那里处理窗口的事件并通过opener属性通知原始窗口,首先检查开启器是否已关闭.请注意,这在Opera中并不总是有效.
window.onunload = function() {
var win = window.opener;
if (!win.closed) {
win.someFunctionToCallWhenPopUpCloses();
}
};
Run Code Online (Sandbox Code Playgroud)
由于unload只要用户在弹出窗口中离开页面而不是窗口关闭时,事件就会触发,您应检查弹出窗口是否已实际关闭someFunctionToCallWhenPopUpCloses:
var popUp = window.open("popup.html", "thePopUp", "");
function someFunctionToCallWhenPopUpCloses() {
window.setTimeout(function() {
if (popUp.closed) {
alert("Pop-up definitely closed");
}
}, 1);
}
Run Code Online (Sandbox Code Playgroud)
如果您无法控制弹出窗口的内容,或者您的某个目标浏览器不支持该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);
Run Code Online (Sandbox Code Playgroud)
您的问题有一个非常简单的解决方案.
首先制作一个新对象,打开一个像这样的流行音乐:
var winObj = window.open('http://www.google.com','google','width=800,height=600,status=0,toolbar=0');
Run Code Online (Sandbox Code Playgroud)
为了知道这个弹出窗口何时关闭,你只需要通过如下循环来检查它:
var loop = setInterval(function() {
if(winObj.closed) {
clearInterval(loop);
alert('closed');
}
}, 1000);
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用您想要的任何JavaScript代码替换警报.
玩得开心!:)
尝试查看unload和beforeunload窗口事件.监视这些应该让你有机会在窗口关闭时通过以下方式卸载DOM时回调:
var newWin = window.open('/some/url');
newWin.onunload = function(){
// DOM unloaded, so the window is likely closed.
}
Run Code Online (Sandbox Code Playgroud)
如果你可以使用jQuery UI对话框,它实际上有一个close事件.