webew
Войти » Регистрация
 
JavaScript :: События

Предупреждение при закрытии окна

15 августа 2008, 16:12
Автор: Александр Бурцев [bur]

Интернет приобретает высокую популярность, как средство обмена информацией. Часто информация представляет большую ценность и вероятность её потери нужно свести к минимуму. Простой пример. Вы полчаса набивали важное письмо, а затем случайно нажали ссылку или закрыли вкладку и информация оказалась потеряна.

Современные сервисы (в том числе и почтовые) принимают определенные меры, чтобы такого не произошло. Например, можно сохранять письмо в черновик или пользоваться автосохранением. Также, с помощью JavaScript, можно дополнительно перестраховаться и выдавать пользователю диалог при попытке закрытия страницы. Например, если вы начали набирать письмо в почте Gmail, а потом пытаетесь закрыть вкладку, то увидите вот такой диалог (Firefox):

Предупреждение при закрытии страницы

Научимся вызывать этот диалог. В реализации некоторых браузеров у объекта window есть событие beforeunload. Оно генерируется при попытке выгрузки текущего окна. Его стандартный обработчик и показывает этот диалог. К сожалению, не получится заменить это диалоговое окно собственным, однако, с помощью свойства returnValue можно изменить текст во второй строке предупреждения. Делается это так:

window.onbeforeunload = function(evt) {
    evt = evt || window.event;
    evt.returnValue = "Вы же ничего не сохранили!";
}

В результате, при попытке покинуть страницу увидим:

Предупреждение при закрытии страницы

Замечания:


© Все права на данную статью принадлежат порталу webew.ru. Перепечатка в интернет-изданиях разрешается только с указанием автора и прямой ссылки на оригинальную статью. Перепечатка в печатных изданиях допускается только с разрешения редакции.
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
NO USERPIC

rgbeast

Может ли обработчик препятствовать закрытию окна, не выдавая запроса на подтверждение? Еще вопрос к строчке evt = evt || window.event;, какие еще значения имеет смысл присваивать объекту evt, чтобы это имело какой-то видимый результат в данной ситуации?
15.08.2008, 18:08
Ответить

bur

rgbeast
Может ли обработчик препятствовать закрытию окна, не выдавая запроса на подтверждение?


Вроде как нет. У меня не получилось. Отмена дефолтного поведения с помощью такого кода не помогает:

if(evt.preventDefault) evt.preventDefault();
evt.returnValue = false;
return false;


Да и не припомню страницы, где такое наблюдается. Спамеры бы с ума посходили от такой возможности :-) Мало того, что можно кучу попапов открыть, так еще и не давать возможности их закрыть без предупреждения.


rgbeast
какие еще значения имеет смысл присваивать объекту evt, чтобы это имело какой-то видимый результат в данной ситуации

Никаких :-)
Fastcoder.org — портал для JavaScrpt-программистов
15.08.2008, 19:53
Ответить
NO USERPIC

veb

В Safari это уже предусмотрено.
17.08.2008, 12:31
Ответить
NO USERPIC

pepelsbey

Именно. После набития текста в любое поле, окно браузера без этого предупреждения уже не закрыть.
17.08.2008, 15:29
Ответить

bur

Спасибо, дополнил статью.
Fastcoder.org — портал для JavaScrpt-программистов
17.08.2008, 22:41
Ответить
NO USERPIC

antoxa

Такие предупреждения начинают появляться на уровне броузеров.
27.10.2008, 12:05
Ответить

bur

Кроме safari есть еще примеры?
Fastcoder.org — портал для JavaScrpt-программистов
28.10.2008, 22:24
Ответить

makemoneyonline

Спасибо за подсказку. Это единственное подходящее решение, которое я нашел по этому вопросу.
Правда есть еще простой скрипт, позволяющий обработать событие, когда пользователь тянется мышкой к крестику во вкладке,в которой открыт сайт. Но это только для друзей :)
Все возможно!
30.03.2009, 11:51
Ответить
NO USERPIC

rgbeast

Сайт "только для друзей" не открывается. Поясните, пожалуйста на чем основано Ваше решение и как это будет выглядеть с точки зрения пользователя.
30.03.2009, 12:01
Ответить
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
© 2007—2010 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100