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

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

15 августа 2008, 16:12

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

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

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

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

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

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

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

Замечания:

  • Лучше воспользоваться функцией для добавления обработчиков событий.
  • Событие beforeunload генерируется в Gecko и IE. В Опере и Сафари описанная фича не работает.
  • При некоторых вариантах закрытия окна браузер может опустить диалог. Например, при нажатии Ctrl+W в IE7.
  • Дополнение от veb и pepelsbey: В Safari это уже предусмотрено. После набития текста в любое поле, окно браузера без этого предупреждения уже не закрыть.

© Все права на данную статью принадлежат порталу 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, чтобы это имело какой-то видимый результат в данной ситуации

Никаких :-)
15.08.2008, 19:53
Ответить
NO USERPIC

veb

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

pepelsbey

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

bur

Спасибо, дополнил статью.
17.08.2008, 22:41
Ответить
NO USERPIC

antoxa

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

bur

Кроме safari есть еще примеры?
28.10.2008, 22:24
Ответить
NO USERPIC

DanielSeddian

Здравствуйте, у меня вопрос такого характера - как здесь уже было замечено, опытные спамеры уже успели оценить "ценность" такой защитной меры и всячески пытаются втиснуть на свои страницы диалоговое окно, которое бы открывалось миллионы раз, не позволяя закрыть вкладку... можно ли как-то настроить, чтобы не было больше одного диалогового окна на страницу (обычно одного предупреждения достаточно)? В частности использую Оперу, но подобных настроек не нашёл
03.12.2014, 22:30
Ответить

1234ru

В последнее время браузеры (по крайней мере, у Firefox) при возникновении таких окон показывают галочку типа "больше не показывать всплывающие окна с этой страницы", она в таком случае помогает.
Насчет Оперы не знаю.
То, что не убивает нас, делает нас инвалидами.
04.12.2014, 12:17
Ответить
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
© 2008—2017 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100

Реклама: