JavaScript onbeforeunload Проблема

Хорошо, у меня есть проблема со следующим кодом. То, что происходит, - когда пользователь закрывает их браузер, он должен запросить их или нажимать "OK" или нажимать CANCEL для отъезда страницы. Нажатие "ОК" инициировало бы window.location для перенаправления к другой странице для пользователя, отслеживающего (и да, для предотвращения войн пламени, там существует вторичная система для уверения точного отслеживания, в случае пользователя, уничтожающего браузер от диспетчера задач (как упомянуто в подобных вопросах)). ОТМЕНА осталась бы на странице, при этом проблема была бы то, что, какую кнопку Вы нажимаете, Вы перенаправляетесь, как будто Вы хотели оставить страницу. Соответствующие нормы ниже.

    window.onbeforeunload = confirmExit;
function confirmExit()
{
    var where_to = confirm("Click OK to exit, Click CANCEL to stay.");
    if (where_to == true)
    {
        window.location="logout.php";
    }
    if (where_to == false){
        alert("Returning...");
    }
}
5
задан Nik 17 June 2010 в 00:25
поделиться

2 ответа

onbeforeunload так не работает. Связанная функция должна возвращать строку, которая, в свою очередь, должна отображаться в диалоговом окне по умолчанию перед загрузкой .

function confirmExit() {
    return "This message will appear in the dialog.";
}

Но вы ничего не возвращаете и не берете в свои руки с помощью confirm () . Если функция ничего не возвращает, диалоговое окно onbeforeunload не отображается вообще.

Чтобы вызвать настоящий выход из системы, вы хотите использовать событие onunload . Вот перезапись:

window.onbeforeunload = confirmExit;
window.onunload = logout;

function confirmExit() {
    return "Click OK to exit, Click CANCEL to stay.";
}

function logout() {
    window.location = 'logout.php';
}

Однако от веб-браузера зависит, будет ли последний на самом деле попадать на сервер. Большинство, если не все веб-браузеры, этого не делают. Я бы предпочел запустить ajaxical-запрос по этому URL-адресу, но вы также зависите от веб-браузера, будет ли он работать безупречно.

6
ответ дан 14 December 2019 в 13:26
поделиться

Возможно, вместо того, чтобы перехватывать браузер пользователя, вы могли бы выполнить XHR-запрос внутри вашей функции unbeforeunload() и получить данные, которые вам нужны, отправив их туда, куда вам нужно?

Без более подробной информации об использовании трудно сказать, но это может стать хорошей альтернативой.

0
ответ дан 14 December 2019 в 13:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: