Onbefore 卸载和 window.onunload 不能在 Firefox,Safari,Opera 中工作?

在我的聊天应用程序,我需要得到用户的确认,当我的应用程序关闭。

因此,我使用 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 尝试了相同的函数,

<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>
213783 次浏览

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

onbeforeunloadonunload不能在 opera工作... 来支持这个

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

虽然 onunload事件不能完全工作,但是如果用户单击链接从未保存表单的页面导航离开,则可以使用 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 太

祝你好运,干杯。

并非所有浏览器都调用 onunload 事件。更糟糕的是,您不能检查 onbefore 卸载事件的返回值。这阻止我们实际上预先注销函数。

但是,你可以破解这个。

Onbefore 卸载事件中的第一件事就是调用 logout。然后提示用户。如果用户取消注销,则使用 onfocus 事件自动重新登录它们。有点倒退,但我觉得应该能行。

'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;
};

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

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

它适用于除 歌剧之外的所有浏览器。

我可以让它在 IE 和 FF 中使用 jQuery 的:

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


});

取代: 卸载,卸载,或在卸载之前

下面是火狐和 chrome 的工作解决方案:

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;
});

Firefox 只是在卸载消息之前不显示自定义。 Mozilla 表示,他们正在保护终端用户免受可能显示误导性文本的恶意网站的攻击。