У нас есть административный портал, что наши учителя постоянно забывают скачивать свои последние инструкции PDF перед тем, чтобы выходить из системы и/или закрытием окна браузера. Я осмотрел, но не могу найти то, что я ищу.
Я хочу выполнить следующие цели:
Прежде чем пользователь может закрыть окно браузера, они запрашиваются, "Вы не забывали загружать свою форму?" с двумя опциями, да/нет. Если да, близко, если не, возврат к странице.
Прежде чем пользователь может нажать кнопку 'выхода из системы', они запрашиваются с тем же как выше.
Моя первичная обработка в очень простом коде (который не работает на браузер близко):
<!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, ЗАТЕМ подсказка браузера. Какие-либо идеи?
Обновление 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?');"
Pointy is правильно насчет событий закрытия браузера - представьте, могут ли злые сайты помешать вам закрыть их окна ?? Таким образом, вы не можете предотвратить их закрытие вашего сайта, но вы можете сделать предупреждение.
Что касается кнопки выхода, это гораздо проще:
<a href="logout.html" onClick="return confirm('Did you remember to download your form?');">Logout</a>
Я думаю, что это может быть частью вашей проблемы:
else if(window.onbeforeunload) {
window.onbeforeunload = unloadMess;
};
Этот тест в операторе "if" будет истинным, только если уже есть функция-обработчик. Этот тест не означает "есть ли у объекта окна свойство 'onbeforeunload'?". Он означает: "свойство 'onbeforeunload' окна в данный момент не равно null?".
Я думаю, что было бы безопасно просто установить "onbeforeunload" напрямую, для любого браузера.
Вы не можете предупреждать или подобные вещи в onbeforeunload
, вы не можете просто вернуть false, чтобы пользователь не покидал страницу, как в случае с другими событиями, такими как onclick
. Это позволит сделать сайт невозможным покинуть его.
Однако вы можете просто вернуть строку, затем браузер покажет диалоговое окно подтверждения, включая вашу строку, спрашивая пользователя, действительно ли он хочет уйти.