在我的聊天应用程序中,当我的应用程序关闭时,我需要得到用户的确认。
因此,我使用window.onbeforeunload
进行确认提醒,并使用window.onunload
注销()。
但这两个功能都在IE和Chrome中运行。(应用程序运行正常)
window.onbeforeunload
无法在Opera中使用,我的消息也不会在Firefox中显示。
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>
答案 0 :(得分:83)
不幸的是,您使用的方法在这些浏览器中不受支持。为了支持我的答案(这种不支持的行为),我在下面给出了链接。
onbeforeunload
和onunload
无效opera
...支持此
onbeforeunload in 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
中工作...以支持此
他们还没有在FF中提出解决方案
祝你好运欢呼。答案 1 :(得分:42)
这是ie,firefox和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;
});
答案 2 :(得分:16)
我能够使用jQuery的IE和FF工作:
$(window).bind('beforeunload', function(){
});
而不是:unload,onunload或onbeforeunload
答案 3 :(得分:13)
我通过将Ajax异步请求更改为同步请求,在Opera以外的所有浏览器中获得了onunload
的解决方案。
xmlhttp.open("POST","LogoutAction",false);
适用于除 Opera 之外的所有浏览器。
答案 4 :(得分:5)
未在所有浏览器中调用onunload事件。更糟糕的是,您无法检查onbeforeunload事件的返回值。这使我们无法实际执行注销功能。
但是,你可以解决这个问题。
在onbeforeunload事件中首先调用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;
};
答案 5 :(得分:2)
Firefox根本不显示自定义的onbeforeunload消息。 Mozilla表示他们正在保护最终用户免受可能显示误导性文本的恶意网站的侵害。