Запретить пользователю закрывать окно браузера с помощью «X»? - PullRequest
0 голосов
/ 14 января 2009

Могу ли я, используя javascript, определить, нажал ли пользователь значок «X» в диалоговом окне браузера или кнопки «ОК» / «Отмена»? У меня есть код, который нужно запустить при закрытии окна, но он будет работать только при нажатии OK или Отмена.

В данный момент я фиксирую событие onunload окна. Как я могу это сделать?

window.onunload = function() { alert("unloading"); }

Ответы [ 5 ]

6 голосов
/ 14 января 2009

Почему вы хотите это сделать? Возможно, мы поможем вам придумать другой дизайн, который не требует этого, если вы сообщите нам, что вы пытаетесь сделать.

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

4 голосов
/ 14 января 2009

Если я правильно понял, ваш вопрос касается браузера диалога , а не основного браузера окна .

Чтобы ответить на ваш вопрос, вы, вероятно, не можете различить кнопку Отмена и кнопку X браузера диалоговое окно . Они оба в итоге просто вернут false. Если вам нужен этот уровень контроля, вы должны написать собственный смоделированный диалог (лайтбокс) вместо реального диалога JavaScript. Или, возможно, посмотрите на существующие фреймворки / плагины с модальными диалоговыми окнами, которые дают вам необходимый уровень контроля.

3 голосов
/ 14 января 2009

А что если он нажмет ALT + F4?

2 голосов
/ 14 января 2009

Насколько мне известно, вы не можете определить, закрыл ли пользователь диалоговое окно, нажав кнопку «Отмена» или кнопку [x], так как ни один из них не был выставлен вам после возврата результата действия (например, подтверждения () как истина / ложь).

Вы можете подключиться к событию document.onbeforeunload, чтобы выполнить все необходимые действия по очистке; Я сам сделал это, отправив асинхронный запрос XMLHTTP на сервер, чтобы убедиться, что сеанс пользователя очищен должным образом.

0 голосов
/ 14 января 2009

Невозможно отследить закрытие браузера и обработать любое другое событие, которое также вызывает обратную запись. Вы можете попробовать, и многие люди до вас и потерпели неудачу.

Лучше всего использовать onbeforeunload и научиться обращаться с тайм-аутами сеансов на вашей стороне сервера для очистки данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...