Подтвердить что ты не робот

Как предотвратить вызов onbeforeunload при обновлении страницы

Я хочу предотвратить вызов функции confirmExit(), когда страница обновляется. Можно ли это сделать?

<script language="JavaScript">
window.onbeforeunload = confirmExit;
function confirmExit()
{
   $.post("test.php");
}
</script>
4b9b3361

Ответ 1

Вы не можете. Обновление страницы похоже на навигацию и разгрузку DOM, поэтому событие onbeforeunload всегда будет вызываться.

Ответ 2

Для того, что вы ищете, лучший способ иметь элемент управления обновлением веб-страницы был бы с функцией onKeyDown. К сожалению, нажатие кнопки обновления прямо из вашего браузера снова загрузит DOM, поэтому технически нет способа предотвратить обновление этого действия.

Попав в ту же проблему, я нашел эту веб-страницу http://asquare.net/javascript/tests/KeyCode.html, где вы можете проверить реакцию своего браузера на события клавиатуры. Здесь вы можете начать выяснять, почему onKeyDown - лучший вариант. Chrome не реагирует на функцию onKeyPress.

Вам просто нужна переменная для управления обновлением. Если пользователь нажимает клавишу, действие onBeforeUnload не будет выполнено.

var refresh = false;  //Control variable to control refresh access
j$(window).bind('beforeunload', function(){
    if (refresh == false) { // If F5 is not pressed
        return "Do you really want to leave?";
    }
});

j$(window).keydown(function(event) {
  if (event.keyCode == 116) { // User presses F5 to refresh
     refresh = true;
   }
});

Ответ 3

Есть две вещи, которые следует учитывать. (1) Функция "window.onbeforeunload" выполняется при отпускании клавиши f5 (onkeyup). Все, что необходимо изменить, должно происходить до этого как onkeydown. (2) Функция не будет работать, если за возвратом следует нулевое значение.

Если вы установите глобальную переменную для использования в качестве возвращаемого значения и сделаете ее нулевой, если нажать клавишу f5, диалог не появится, если f5 используется для обновления. Однако, если кнопка "Закрыть" нажата, она появляется. Обратите внимание, что код внутри "onbeforeunload" будет работать, даже если возвращаемое значение равно null, поэтому вы должны проверить свое возвращаемое значение, если вы также хотите, чтобы код был отключен.

document.onkeydown = KeyCheck;
window.returnMessage="You are now logged out.";
function KeyCheck(e) {
    var key = (window.event) ? event.keyCode : e.keyCode;
    alert(key);
    if(key==116) {window.returnMessage=null;}
    }
$(function(){
    window.onbeforeunload = function(event) {
        if(window.returnMessage.length > 0) {logoutFunction();}
        return window.returnMessage;
        }   
    });