当用户关闭一个(弹出)窗口时调用一些JavaScript

问题描述:

当用户关闭一个窗口时可以调用一些JS吗?当用户关闭一个(弹出)窗口时调用一些JavaScript

我搜索了JS事件处理程序,发现只有onunload,每当用户离开页面时调用脚本,不一定关闭窗口。

预期的用途是调用一个AJAX脚本,该脚本会取消与弹出窗口相关的几个会话。实现这一目标有没有更好的方法?

我发现this DevShed thread其中声明这可以通过JS,但它不能解释如何调用脚本。

不幸的是,大多数谷歌搜索这个解决方案带来了window.close,这实际上与我所需要的相反!

下面的代码在Firefox,IE 8,和“Google Chrome”。

在打开的窗口中

<script src="http://ajax.googleapis.com/ajax/libs/mootools/1.2.3/mootools-yui-compressed.js"></script> 
<script> 
function on_popup_close(){ 
    //put your code here 
    alert('it closed'); 
} 
</script> 

在弹出

<script> 
function inform_parent(){ 
    opener.on_popup_close(); 
} 

window.onbeforeunload = inform_parent; 
</script> 

在第一行代码用于打开的窗口中可以将自己喜欢的框架,实现了美元符号运算符。

See my demo here

+0

欣赏您创建的演示脚本,但它仍然遇到原始问题 - 在弹出窗口中的页面之间导航时,通知父窗口弹出窗口已关闭,但情况并非如此。 – bcmcfc 2009-08-31 11:26:53

+0

上面的脚本src部分不需要它的工作。但无论如何感谢您的答案。 – 2012-10-20 15:19:49

您可以从父窗口检查子窗口仍然存在如果不是(例如检查每100毫秒左右),并启动脚本...

+0

你可能要检查的弹出网页的网址为好,看他们是否从导航您的网域/应用的路程。 – Ian 2009-08-26 10:55:10

看一看在window.opener财产。除IE以外,它有相当不错的support。您可以使用它在window.close()之前调用父窗口中的某些JavaScript函数。

+0

我不是window.clos()弹出我的弹出窗口,我只需要处理用户点击十字架的情况! – bcmcfc 2009-08-26 10:56:24

+0

啊,但那你应该可以使用卸载事件了,不是吗? – 2009-08-26 10:58:14

+0

卸载似乎在用户在弹出窗口中浏览页面时触发,而不是在关闭窗口时触发。所以它会导致更多的问题,而不幸的是它会解决。 – bcmcfc 2009-08-26 11:00:16

不知道它是否工作在实践中,但如果问题是导航到内部网页,为什么不设置一些类型,只要点击一个链接页面的全局变量,并检查该onunload的?

喜欢的东西(原谅jQuery的,我非常懒惰):

INTERNAL_CLICKED = false; 

$("a").click(function() { 
    INTERNAL_CLICKED = true; 
}); 

window.onunload = function() { 
    if(!INTERNAL_CLICKED) { 
     // perform window unload code 
    } 
} 

要重申,没有经过充分测试,但谁知道 - 它很可能只是为你工作。虽然,我会小心,这可能会刷新刷新。

嗨您可以使用onbeforeunload事件下面的函数由window解雇只是window.close

window.onbeforeunload = function() { 
    // stuff do do before the window is unloaded here. 
} 

之前让我知道,如果不解决乌尔万阿英,蒋达清