Window.onbeforeunload и window.onunload не работает в Firefox, Safari, Opera?

В моем приложении чата мне нужно получить подтверждение от пользователя, когда мое приложение закроется.

Поэтому я использовал 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 заявляет, что они защищают конечных пользователей от вредоносных сайтов, которые могут показывать вводящий в заблуждение текст.