Захват результата диалога 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 произойдет первым?

Ответы

Ответ 1

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

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

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

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

Ответ 2

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

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