Хорошо, у меня есть проблема со следующим кодом. То, что происходит, - когда пользователь закрывает их браузер, он должен запросить их или нажимать "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...");
}
}
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-адресу, но вы также зависите от веб-браузера, будет ли он работать безупречно.
Возможно, вместо того, чтобы перехватывать браузер пользователя, вы могли бы выполнить XHR-запрос внутри вашей функции unbeforeunload() и получить данные, которые вам нужны, отправив их туда, куда вам нужно?
Без более подробной информации об использовании трудно сказать, но это может стать хорошей альтернативой.