Остановить выгрузку/закрытие страницы

У меня есть система, в которой страница не должна закрываться/выгружаться до тех пор, пока не будет выполнено определенное условие. Это сделано для того, чтобы заставить персонал заполнить очень важную информацию.

Я знаю, что это НЕ является хорошей практикой пользовательского интерфейса, я полностью согласен, но в этом случае после долгих обсуждений это на 100% необходимо.

Я пробовал следующий код:

 $(window).bind('beforeunload', function (event) {
                cancelEvent(event);
                stopEvent(event);
 });

function cancelEvent(e) {
    if (!e) e = window.event;
    if (e.preventDefault) {
        e.preventDefault();
    } else {
        e.returnValue = false;
    }
}

function stopEvent(e) {
    if (!e) e = window.event;
    if (e.stopPropagation) {
        e.stopPropagation();
    } else {
        e.cancelBubble = true;
    }
}

Приведенный выше код не работает.

Есть ли способ убить событие выгрузки и сохранить отображаемую страницу?

Целевыми браузерами являются IE 7-9, поэтому даже если он не работает в современных браузерах, все будет в порядке.

Еще раз спасибо.


person Lemex    schedule 05.05.2014    source источник
comment
См. ответ jAndy на эту тему.   -  person    schedule 05.05.2014


Ответы (1)


Это не только плохой дизайн пользовательского интерфейса, это невозможно сделать. Что вы можете сделать в beforeunload, так это вернуть пользователю строку, которая затем будет отображаться в подсказке, где пользователь должен подтвердить навигацию.

$(window).on('beforeunload', function(){
    return 'Are you sure you want to leave?';
});

Ваш лучший вариант - предоставить достаточно резкое сообщение, например. "Вы собираетесь покинуть страницу до того, как завершится процесс X. Не делайте этого, вы все испортите. Серьезно, нажмите "Отмена сейчас"".

person David Hedlund    schedule 05.05.2014