是否有可能打开与JavaScript的popup窗口,然后检测用户什么时候closures它?
问题几乎全是在标题中。
是否有可能(以及如何?)打开与JavaScript的popup窗口,然后检测何时closures它?
我在项目中使用jQuery,所以jQuery的解决scheme将是很好的。 干杯!
如果你可以控制popup窗口的内容,那么在那里处理窗口的unload
事件,并通过opener
属性通知原始窗口,首先检查开启者是否已经closures。 请注意,这不会在Opera中始终有效。
window.onunload = function() { var win = window.opener; if (!win.closed) { win.someFunctionToCallWhenPopUpCloses(); } };
由于unload
事件只会在用户从popup窗口中离开页面时触发,而不是在窗口closures时someFunctionToCallWhenPopUpCloses
,所以应该检查popup窗口是否已经在someFunctionToCallWhenPopUpCloses
实际closures:
var popUp = window.open("popup.html", "thePopUp", ""); function someFunctionToCallWhenPopUpCloses() { window.setTimeout(function() { if (popUp.closed) { alert("Pop-up definitely closed"); } }, 1); }
如果您无法控制popup窗口的内容,或者您的某个目标浏览器不支持unload
事件,则可以将其缩小为主窗口中的某种轮询解决scheme。 调整间隔以适应。
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);
如果你可以使用jQuery UI对话框 ,它实际上有一个close
事件。
尝试查看unload
和beforeunload
窗口事件。 监视这些应该给你一个机会,当窗口被closures的时候通过类似下面的方式卸载DOM:
var newWin = window.open('/some/url'); newWin.onunload = function(){ // DOM unloaded, so the window is likely closed. }
打开一个新窗口打电话:
var wnd = window.open("file.html", "youruniqueid", "width=400, height=300");
如果你只是想知道什么时候该窗口将要closures,请使用onunload
。
wnd.onunload = function(){ // do something };
如果你想在用户确认之前closures它,请使用onbeforeunload
。
wnd.onbeforeunload = function(){ return "are you sure?"; };
我们在工作中的一个项目中这样做。
诀窍是在您的父页面中有一个JS函数,当popup窗口closures时您打算调用它,然后在popup窗口中挂钩卸载事件。
window.opener
属性指的是生成这个popup窗口的页面。
例如,如果我在原始页面上写了一个名为callingPageFunction
的函数,我会像这样从popup窗口中调用它:
$(window).unload(function() { window.opener.callingPageFunction() });
两个注释:
- 这应该包装在一个准备好的function。
- 我有一个匿名函数,因为你可能需要其他的逻辑
你的问题有一个非常简单的解决scheme。
首先做一个新的对象,这将打开一个像这样的stream行:
var winObj = window.open('http://www.google.com','google','width=800,height=600,status=0,toolbar=0');
为了知道这个popup窗口何时closures,你只需要继续检查这个循环,如下所示:
var loop = setInterval(function() { if(winObj.closed) { clearInterval(loop); alert('closed'); } }, 1000);
现在你可以用任何你想要的javascript代码来代替alert。
玩的开心! 🙂
我现在唯一能想到的方法就是在你的父页面上创build一个函数,该函数有一个在10秒后自动调用的超时。 在函数中,你也可以检查一个cookie的值,看它是真是假。 当popup窗口closures时,将cookie设置为true。
希望这可以帮助。
是的,处理popup窗口的onbeforeUnload事件,然后使用以下命令在父窗口上调用一个函数:
window.opener.myFunction()