Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Запрет закрытия окна


Автор: GoodBoy 20.2.2004, 12:02
Братцы подскажите как на JS запретить закрытие окна при нажатии на крестик или Flt+F4. Ужо мочи нету... Босс требует...

Заранее зело благодарен!!!

Автор: Alx 20.2.2004, 12:26
Код

<body onbeforeunload="return false;" onunload="return false;">


врядли сработает! ед. вариант, как мне кажется:
Код

<body onbeforeunload="func()" onunload="func()">

<script>
function func()
{window.open (document.location.href,"","")
}
</script>

Автор: GoodBoy 20.2.2004, 12:53
Такой вариант неприемлем по двум причинам:

1. Это сработает и при релоаде страницы, а мне надо отловить именно закрытие.
2. На странице вводится текст и при обычной перезагрузке он просто потеряется...

Автор: Sardar 20.2.2004, 16:11
Цитата
Братцы подскажите как на JS запретить закрытие окна при нажатии на крестик или Flt+F4. Ужо мочи нету... Босс требует...

Зачем это могло понадобится...?

Однозначный ответ: этого сделать нельзя! Даже если ИЕ будет тупить и выполнять такой код, другие браузеры и оболочки по ИЕ пропускать такое не будут.

Автор: GoodBoy 20.2.2004, 16:17
Сам знаю, что нельзя... Но надеялся, что может быть можно... :-(
Правда мне только для ИЕ и нужно было... А требовалось это для того, что-бы нельзя было случайно закрыть окно и потерять введенный текст...

Автор: Sardar 20.2.2004, 16:56
Тогда событие onbeforeunload должно помочь. Появится диалог "действительно закрыть эту страницу?".

Автор: GoodBoy 24.2.2004, 11:31
Цитата
Тогда событие onbeforeunload должно помочь

НЕТ!!!!!!! я об этом уже писал!!!
Цитата
Это сработает и при релоаде страницы, а мне надо отловить именно закрытие

Автор: Sardar 24.2.2004, 19:39
Событие будет вызыватся при закрытии окна, но остановить этот процесс ничем нельзя. Можно при закрытии скопировать все важнное в буффер обмена и сообщить, что возможно не все еще погибло...

Автор: GoodBoy 25.2.2004, 11:15
Sardar: Событие будет вызываться при закрытии окна, перезагрузке страницы и переходе на новую страницу!!! А мне нужно было ТОЛЬКО при закрытии!!!!

Тему можно считать закрытой...

Автор: Royan 1.3.2004, 21:54
Объясни босу - это нарушает политику безопасности Microsoft Internet Explorer, поэтому такая возможность не предусмотрена разработчиками IE. На том точка.

Автор: GoodBoy 2.3.2004, 12:08
Royan Босс уже проникся!!! :-))) Но с другой стороны - не удобно... В винде для своего приложения так сделать можно, а внутри ИЕ - низя...

Автор: Alx 2.3.2004, 14:38
ты понимаешь, сколько вирусов и спама бы за это цеплялось! sad.gif

Автор: GoodBoy 3.3.2004, 11:23
ALEXANDRO Я тоconfused.gif Очень даже хорошо!!!!!!!!

Автор: Alx 3.3.2004, 20:17
GoodBoy
smile.gif

Автор: GoodBoy 15.3.2004, 13:54
И все-таки я это сделал!!! :-)))))))
Код
<script>
function doUnload() {
   return "ПРИ УХОДЕ СО СТРАНИЦЫ ВСЕ НЕСОХРАНЕННЫЕ ДАННЫЕ БУДУТ УТЕРЯНЫ!!!";
}

document.onkeydown = checkKey;

function checkKey() {
   if (event.ctrlKey && event.keyCode==82) {
       document.body.onbeforeunload = null;
   }
}
  ...
</script>

<body onBeforeUnload="return doUnload();" style="margin:0pt;padding:0pt;height:100%">
  ...

В таком варианте нажатие на крестик закрытия окна приводит к запросу на закрытие, а при нажатии Ctrl+R - запрос подавляется.

Автор: Гость_Sardar 15.3.2004, 14:06
Я об этом говорил постами выше. Событие onbeforeunload специально созданно для "предотвращения" потери данных. По моему у меня не получилось остановить закрытие, лень было в MSDN'e посмотреть.
Кстати теперь по моему и Gecko(Mozilla, Netscape...) поддерживает это событие.

Автор: GoodBoy 15.3.2004, 14:13
2 Гость?? Sardar Эт понятно!!! Я и сам про onbeforeunload знал, но нужно было его заставить работать ТОЛЬКО при крестике!! :-))))))))

ЗЫ. А почему ты - гость?? :-)))))))

Автор: Alx 15.3.2004, 14:47
GoodBoy
ну ты крут! smile.gif

Автор: Sardar 15.3.2004, 19:19
GoodBoy
Цитата
но нужно было его заставить работать ТОЛЬКО при крестике!! :-))))))))

Ctrl+R это не выход...
Цитата
ЗЫ. А почему ты - гость?? :-)))))))

Жизнь такая smile.gif , не из дома был.

ALEXANDRO
Цитата
GoodBoy
ну ты крут!

Ну нравится же тебе флеймить!!! biggrin.gif Для этого приват есть.

Автор: Alx 15.3.2004, 22:41
Sardar
я сам не люблю флейм, но я ж почучуть, никому не мешая! к тому же это не очень далеко от темы! smile.gif но я постараюсь сдерживаться! smile.gif adv/54.gif

Автор: GoodBoy 17.3.2004, 11:17
2 Sardar
Цитата
Ctrl+R это не выход...

Понятно, что не выход!! :-)))))))) Я решил подавить запрос при перезагрузке страницы.

Автор: Иль 12.10.2005, 10:41
Елки, теперь понятно! Это сделано как встроенный стандартный компонент браузера типа confirm. Ну чтож, довольно деликатно и права пользователя не ущемлены и свой текст добавлять можно. Тем более приятно, что в Gecko это работает также.

Автор: Fal'K° 1.11.2005, 15:18
У меня не работает хоть крестиком, хоть ноликом, хоть ALT+F4
закрывается без возмущений
smile

Автор: Sardar 2.11.2005, 00:40
Fal'K° однозначно либо JS отключен, либо руки не из того места. Код приведённый GoodBoy на предидущей странице должен работать.

Автор: Гость_12345 3.11.2005, 02:32
Sardar: из-под GreenBrowser событие onBeforeUnload игнорируется

Автор: Aliance 3.11.2005, 02:56
Естественно, оно поддерживается только в ИЕ.

Автор: Sardar 3.11.2005, 02:56
Он на своём особом движке? Точно не знаю, но ИЕ, Геко и Опера должны иметь onbeforeunload, KHTML и производные(Safari) не знаю...

Скорее всего под таким браузером просто нельзя отследить закрытие окна, либо какой свой, редкий не стандартный API.

Вывод: забей.
Вывод получше: пересмотри задачу, не могу представить себе ситуацию где бы это понадобилось. Фичи гугла, мол перед закрытием окна предупредить юзера, меня это больше раздражает, тем более что SessionSaver плагин для мозиллы оставляет формы заполненными при востановлении окна/сессии и никаких окон)

Автор: Aliance 3.11.2005, 02:59
Разве Gecko тоже?

Автор: Sardar 3.11.2005, 20:54
Проверил, onbeforeunload существует и работает как нужно, FireFox 1.0.7 smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)