window.close()和beforeunload事件

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

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

我正在使用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。

试试这个

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

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