是否有可能打开与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()