window.close()和beforeunload事件

时间:2014-02-05 11:43:20

标签: javascript jquery onbeforeunload

每当用户关闭浏览器窗口时,我都需要清除一些会话变量。窗口可以通过两种方式关闭:

  • 通过按下窗口关闭按钮
  • 的正常方式
  • 按下窗口内的自定义按钮

我正在使用jQuery,所以监听器是:

// clear some session variables
$(window).bind('beforeunload', function() {
    makeAjaxCall(some, params);
});

通过调用最终执行的函数关闭窗口:

window.close();

问题是关闭窗口的第二种方法只触发FF中的beforeunload事件。在Chrome中,第二种方式仅适用于Safari,它根本不起作用。有什么想法吗?


解决方案(到目前为止):

// clear search filter whenever the user closes the window
$(window).on('beforeunload', function() {   // most browsers except Safari
    doSomeMagic(param);
    return;
}).on('unload', function() {         // Chrome
    doSomeMagic(param);
});

这适用于大多数浏览器:使用window.close()和/或本机浏览器按钮关闭窗口时的IE8 +,Chrome,FF

如果窗口由本机浏览器窗口关闭,它也适用于Safari。

根本不适用于Opera。

1 个答案:

答案 0 :(得分:3)

试试这个

$(window).on('beforeunload', function(){
  return 'Are you sure you want to leave?';
});

$(window).on('unload', function(){
     logout();

});

此解决方案适用于所有浏览器,我已对其进行了测试。