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

时间:2009-08-26 10:48:26

标签: php javascript session

用户关闭窗口时是否可以调用某些JS?

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

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

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

不幸的是,大多数Google搜索此解决方案会导致window.close,这实际上与我的需求相反!

5 个答案:

答案 0 :(得分:5)

以下代码适用于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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

查看window.opener属性。除了IE,它有很好的support。您可以在window.close()弹出窗口之前使用它在父窗口中调用一些javascript函数。

答案 3 :(得分:0)

不知道它是否在实践中有效,但如果问题是导航到内部页面,为什么不在页面中单击链接时设置某种类型的全局变量,并检查该onunload?

有点像(借口jQuery,我非常懒惰):

INTERNAL_CLICKED = false;

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

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

重申,完全未经测试,但谁知道 - 它可能只适合你。虽然,我要注意,这也许会在刷新时触发。

答案 4 :(得分:0)

您好您可以在onbeforeunload

之前window window.close点击的window.onbeforeunload = function () { // stuff do do before the window is unloaded here. } 事件中使用以下功能
{{1}}

让我知道它是否解决了你的问题