Подскажите пользователю перед закрытием браузера? - PullRequest
18 голосов
/ 27 мая 2010

У нас есть административный портал, на котором наши преподаватели постоянно забывают загрузить свои последние инструкции в формате 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, ТОГДА приглашение браузера. Есть идеи?

Ответы [ 4 ]

24 голосов
/ 27 мая 2010

Обновление 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 голосов
/ 27 мая 2010

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

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

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

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

1 голос
/ 27 мая 2010

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

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

0 голосов
/ 27 мая 2010

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

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

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