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

Захват результата диалога window.onbeforeunload

Есть ли способ захвата результата window.onbeforeunload, как показано ниже, из (это происходит, когда вы покидаете страницу "Спросить вопрос", не публикуя вопрос)?

Вот как это выглядит в Chrome, я считаю, что он немного отличается в других браузерах, но у вас всегда есть кнопки "да/нет".

window.onbeforeunload confirmation dialog

Предположительно, если они все еще находятся на оскорбительной странице после того, как событие было запущено, они решили остаться, и вы, вероятно, могли бы это выяснить, наблюдая последовательность js. Однако Я хотел бы знать, как определить, нажали ли они кнопку "Оставить эту страницу" ?

Я реализовал это, как показано ниже:

// concept taken from SO implementation
function setConfirmUnload(showMessage, message) {
    window.onbeforeunload = showMessage ? (message ? message : "this is a default message") : null;
}

// pseudo code
listen to changes on inputs
if any inputs fire a change event
   call setConfirmUnload(true, 'My warning message')

note Я использую jQuery на своем сайте.

Я по сути пытаюсь реализовать реалистичную реализацию Gmail, в которой, если пользователь оставляет страницу с формой, в которую они вносили изменения без сохранения, они нагреваются с помощью аналогичного диалога. Если они захотят отказаться, это изменения и оставить страницу, мне нужно очистить некоторые временные записи из базы данных (я думаю, что вызов AJAX или просто отправьте форму с флагом delete), а затем отправьте их на их путь.

Мой вопрос также относится к:

jQuery AJAX вызов при запуске обработчика onunload ПОСЛЕ получения страницы при обновлении вручную. Как я могу гарантировать, что onunload произойдет первым?

4b9b3361

Ответ 1

У вас может быть подтверждение на выход с помощью window.onbeforeunload, но нет способа узнать, на какую кнопку нажал пользователь.

Чтобы процитировать предыдущий ответ jvenema из этого потока:

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

Кроме того, если ваши пользователи уходят, это уже слишком поздно [...]

Ответ 2

Как насчет этого:

$( window ).bind( 'beforeunload' , function( event ) {
    setTimeout( function() {
        alert( 'Hi againe!' );
    } );
    return '';
} ).bind( 'unload', function( event ) {
    alert( 'Goodby!' );
} );