http://www.zachleat.com/web/dont-let-the-door-hit-you-onunload-and-onbeforeunload/
Though the onunload
event doesn't work completely, you can use onunload
to show a warning if a user clicks a link to navigate away from a page with an unsaved form.
onunload
not working in safari
... to support this
https://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/
You could rather try using the pagehide
event in the safari browser in lieu of onunload
.
onunload
not working in firefox
... to support this
https://bugzilla.mozilla.org/show_bug.cgi?id=681636
They are yet to come up with a solution in FF too.
Here is the working solution for ie, firefox and chrome:
var myEvent = window.attachEvent || window.addEventListener;var chkevent = window.attachEvent ? 'onbeforeunload' : 'beforeunload'; /// make IE7, IE8 compitablemyEvent(chkevent, function(e) { // For >=IE7, Chrome, Firefoxvar confirmationMessage = 'Are you sure to leave the page?'; // a space(e || window.event).returnValue = confirmationMessage;return confirmationMessage;});
I was able to get it to work in IE and FF with jQuery's:
$(window).bind('beforeunload', function(){});
instead of: unload, onunload, or onbeforeunload
I got the solution for onunload
in all browsers except Opera by changing the Ajax asynchronous request into synchronous request.
xmlhttp.open("POST","LogoutAction",false);
It works well for all browsers except Opera.
The onunload event is not called in all browsers. Worse, you cannot check the return value of onbeforeunload event. That prevents us from actually preforming a logout function.
However, you can hack around this.
Call logout first thing in the onbeforeunload event. then prompt the user. If the user cancels their logout, automatically login them back in, by using the onfocus event. Kinda backwards, but I think it should work.
'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 simply does not show custom onbeforeunload messages. Mozilla say they are protecing end users from malicious sites that might show misleading text.