window.onbeforeunload和window.onunload不适用于Firefox,Safari,Opera?

在我的聊天应用程序中,当我的应用程序closures时,我需要从用户那里得到确认。

所以我使用window.onbeforeunload确认警报和window.onunload logout()。

  1. 但是这两个函数都在IE和Chrome中工作(应用程序工作正常)

  2. window.onbeforeunload在Opera中不起作用,我的消息不会显示在Firefox中。

  3. window.onunload不适用于Safari,Opera和Firefox。

我的javaScript代码将是,

 // Used for confirmation , to closing the window window.onbeforeunload = function () { return "Are you sure want to LOGOUT the session ?"; }; // Used to logout the session , when browser window was closed window.onunload = function () { if((sessionId != null)&&(sessionId!="null")&& (sessionId != "")) logout(); }; 

我也尝试过与JQuery相同的function,

 <script type="text/javascript"> $(window).on('beforeunload', function() { return 'Are you sure want to LOGOUT the session ?'; }); $(window).unload(function() { if ((sessionId != null) && (sessionId != "null") && (sessionId != "")) { logout(); } }); </script> 

不幸的是,您使用的方法在这些浏览器中不受支持。 为了支持我的回答(这种不支持的行为),我给了下面的链接。

onbeforeunloadonunload不在opera工作…来支持这个

onbeforeunload在Opera中
http://www.zachleat.com/web/dont-let-the-door-hit-you-onunload-and-onbeforeunload/

尽pipeonunload事件不能完全工作,但是如果用户单击一个链接来导航离开未保存表单的页面,则可以使用onunload显示警告。

onunload不在safari工作…支持这一点

https://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

您可以尝试在Safari浏览器中使用pagehide事件来代替onunload

onunload不工作在firefox …支持这一点

https://bugzilla.mozilla.org/show_bug.cgi?id=681636

他们还没有想出FF的解决scheme

祝你好运,欢呼。

这是Firefox,Chrome的工作解决scheme:

 var myEvent = window.attachEvent || window.addEventListener; var chkevent = window.attachEvent ? 'onbeforeunload' : 'beforeunload'; /// make IE7, IE8 compitable myEvent(chkevent, function(e) { // For >=IE7, Chrome, Firefox var confirmationMessage = 'Are you sure to leave the page?'; // a space (e || window.event).returnValue = confirmationMessage; return confirmationMessage; }); 

我能够得到它在IE和FF与jQuery的工作:

 $(window).bind('beforeunload', function(){ }); 

而不是:unload,onunload或onbeforeunload

通过将Ajaxasynchronous请求更改为同步请求,我得到了除Opera之外的所有浏览器中的onunload解决scheme。

 xmlhttp.open("POST","LogoutAction",false); 

它适用于除Opera以外的所有浏览器。

onunload事件不在所有浏览器中调用。 更糟的是,你不能检查onbeforeunload事件的返回值。 这阻止了我们实际执行注销function。

不过,你可以绕过这个。

在onbeforeunload事件中首先呼叫注销。 然后提示用户。 如果用户取消注销,则使用onfocus事件自动将其重新login。 有点落后,但我认为它应该工作。

 'use strict'; var reconnect = false; window.onfocus = function () { if (reconnect) { reconnect = false; alert("Perform an auto-login here!"); } }; window.onbeforeunload = function () { //logout(); var msg = "Are you sure you want to leave?"; reconnect = true; return msg; }; 

Firefox根本不显示自定义onbeforeunload消息。 Mozilla表示,他们正在保护最终用户免受可能会显示误导性文字的恶意网站的侵害。