В моем приложении чата мне нужно получить подтверждение от пользователя, когда мое приложение закроется.
Поэтому я использовал 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>
Ответ 1
Я получил решение для onunload
во всех браузерах, кроме Opera, изменив асинхронный запрос Ajax на синхронный запрос.
xmlhttp.open("POST","LogoutAction",false);
Он хорошо работает для всех браузеров, кроме Opera.
Ответ 2
К сожалению, методы, которые вы используете, не поддерживаются в этих браузерах. Чтобы поддержать мой ответ (это неподходящее поведение), я дал ссылки ниже.
onbeforeunload
и onunload
не работают в opera
... для поддержки этого
onbeforeunload в 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/
Вы можете попробовать использовать событие pagehide
в браузере Safari вместо onunload
.
onunload
не работает в firefox
... для поддержки этого
https://bugzilla.mozilla.org/show_bug.cgi?id=681636
Они еще не придумали решение в FF
Желаю вам удачи.
Ответ 3
Вот рабочее решение для 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;
});
Ответ 4
Мне удалось заставить его работать в IE и FF с помощью jQuery:
$(window).bind('beforeunload', function(){
});
вместо: выгрузка, onunload или onbeforeunload
Ответ 5
Событие onunload не вызывается во всех браузерах. Хуже того, вы не можете проверить возвращаемое значение события onbeforeunload. Это мешает нам фактически выполнить функцию выхода из системы.
Однако вы можете взломать это.
Вызовите первый вход в событии onbeforeunload. затем запросите пользователя. Если пользователь отменяет их выход из системы, автоматически введя их обратно, используя событие 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;
};
Ответ 6
Firefox просто не показывает пользовательские сообщения onbeforeunload.
Mozilla заявляет, что они защищают конечных пользователей от вредоносных сайтов, которые могут показывать вводящий в заблуждение текст.