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

Запрос пользователя перед закрытием браузера?

У нас есть административный портал, который наши учителя постоянно забывают загружать свои последние инструкции PDF перед выходом из системы и/или закрытием окна браузера. Я огляделся, но не могу найти то, что я ищу.

Я хочу достичь следующих целей:

Цель 1

Прежде чем пользователь сможет закрыть окно браузера, им будет предложено "Не помните, чтобы загрузить форму?" с двумя вариантами, да/нет. Если да, закройте, если нет, вернитесь на страницу.

Цель 2

Прежде чем пользователь сможет щелкнуть кнопку "Выход из системы", им будет предложено указать то же, что указано выше.

Мой первый проход по самому базовому коду (который не работает для закрытия браузера):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>

<script type="text/javascript">
function init() {
    if (window.addEventListener) {
        window.addEventListener("beforeunload", unloadMess, false);
    } else if (window.onbeforeunload) {
        window.onbeforeunload = unloadMess;
    };
}

function unloadMess() {
    var User_Message = "[Your user message here]"
    return User_Message;
}
</script>
</head>

<body onload="init();">
     hello this is my site
</body>
</html>

РЕДАКТИРОВАТЬ - НОВЫЕ ВОПРОСЫ

Предлагаемое ниже решение работает, но также имеет свои проблемы:

Когда пользователь нажимает ссылку для фактической загрузки форм, страница думает, что они пытаются уйти, и в свою очередь представляет сообщение об ошибке! Кроме того, я хотел бы, чтобы произошло одно событие, но не обязательно оба. То есть они нажимают кнопку "выход из системы", и они представлены событием OnClick, THEN приглашение браузера. Любые идеи?

4b9b3361

Ответ 1

Обновление 2017

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

window.onbeforeunload = function(evt) {
   return true;
}

Это для закрытия вкладки:

window.onbeforeunload = function(evt) {
    var message = 'Did you remember to download your form?';
    if (typeof evt == 'undefined') {
        evt = window.event;
    }
    if (evt) {
        evt.returnValue = message;
    }

    return message;
}

и используйте кнопку onClick для выхода из системы:

onClick="return confirm('Did you remember to download your form?');"

Ответ 2

Я думаю, что это может быть частью вашей проблемы:

else if(window.onbeforeunload) {
  window.onbeforeunload = unloadMess;
};

Этот тест в выражении "if" будет истинным только в том случае, если уже есть функция обработчика. Этот тест не означает: "У объекта окна есть свойство" onbeforeunload "?". Это означает, что "свойство onbeforeunload для окна в настоящее время не равно null".

Я думаю, что было бы безопасно просто установить "onbeforeunload" напрямую, для любого браузера.

Ответ 3

В onbeforeunload вы не можете оповещать или что-то подобное, вы не можете просто вернуть false, чтобы пользователь не покидал страницу, как и другие события, такие как onclick. Это позволит сайту сделать невозможным его оставить.

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

Ответ 4

Уолтик прав о событиях закрытия браузера - представьте, могут ли злые сайты помешать вам закрыть окна? Таким образом, вы не можете предотвратить их закрытие своего сайта, но вы можете сделать предупреждение.

Что касается кнопки выхода из системы, это гораздо более прямолинейно:

<a href="logout.html" onClick="return confirm('Did you remember to download your form?');">Logout</a>