是否有可能打开与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事件。

尝试查看unloadbeforeunload窗口事件。 监视这些应该给你一个机会,当窗口被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() }); 

两个注释:

  1. 这应该包装在一个准备好的function。
  2. 我有一个匿名函数,因为你可能需要其他的逻辑

你的问题有一个非常简单的解决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()