Я хочу контролировать, насколько легко люди могут покинуть мое приложение. Теперь я знаю, что не могу сделать это полностью; это то, для чего нужны задания cron. Но я хотел бы поймать как можно больше случаев.
Я подумал, что мог бы использовать onBeforeUnload
для отображения диалогового окна, предупреждая их об уходе и прося вместо этого нажать кнопку «Выход».
Но потом я узнал, что можно запустить синхронный вызов AJAX (хех) при вызове onBeforeUnload
; Преимущество синхронности заключается в том, что браузер будет ждать его завершения, прежде чем продолжить, насколько я понимаю. Таким образом, я мог сообщить серверу, что выхожу из системы, когда они закроют окно. И поскольку он находится в onBeforeUnload
, а не в onUnload
, все данные все еще существуют, и вызов будет отправлен.
У меня вопрос, можно ли их совместить? Я хотел бы, чтобы всплывающее окно предупреждало их об уходе, а затем, ЕСЛИ они продолжают хотеть уйти, отправьте сообщение о том, что они действительно уходят.
Насколько я понимаю, я не могу этого сделать; Я могу сделать:
- Отправить сообщение только
- Поставь только диалог
- Отправьте сообщение и откройте диалоговое окно
... но я не могу отправить сообщение условно, если они приняли диалоговое окно, верно? Насколько я понимаю, когда они нажимают «ОК, я хочу уйти», сразу же срабатывает onUnload
, и к этому моменту уже слишком поздно. И № 3 выше бесполезен, потому что я не хочу отправлять сообщение о том, что они выходят из системы, а затем заставлять их отменять диалог и оставаться на странице.
Можно мне тоже взять свой торт и съесть его? Могу ли я спросить их, хотят ли они уйти, и если да, то отправить сообщение?
onbeforeunload
в таких случаях, это небезопасно: это нестандартное событие не поддерживается Opera и поэтому никогда не срабатывает. Кроме того, удаление браузера с помощью диспетчера задач или чего-то еще (команда * nixkill
) также не вызывает это событие. - person Marcel Korpel   schedule 26.06.2010