2013-06-04 3 views
1

Контекст:Ожидание события, прежде чем закрытие окна с использованием onbeforeunload

Я разработана приложение, которое требует аутентификации. Это приложение использует события для диалогов с сервером. Когда сервер отвечает, некоторые события отправляются клиенту (UI).

Проблема:

Когда пользователь закрывает страницу, необходимо сделать выход из системы на сервере. С моей архитектурой легко вызвать метод, который выполняет этот выход. Но я хотел бы, чтобы пользователь показывал выход из системы до закрытия веб-страницы. Фактически, я хотел бы закрыть веб-страницу только тогда, когда определенное событие (например: disconnection_success) хорошо принято. Кроме того, важно не удалять другую веб-страницу, потому что событие получено на первой веб-странице, когда выход завершен. (Потому что диалог делается бросок XMLHttpRequest)

Тест:

я уже делают некоторые испытания с использованием onbeforeunload, но мне кажется, что трудно настроить всплывающее окно.

У вас есть идеи для решения проблемы?

BR

ответ

0

Есть некоторые проблемы с этим, но вы на правильном пути. Вы правы в том, что вы должны использовать onbeforeunload, потому что это единственное событие, которое вы можете вызвать при закрытии окна браузера. (Я знаю, что вы можете использовать onunload, но в этот момент у вас нет времени что-либо делать.) Проблема в том, сколько кода вы хотите выполнить. Onbeforeunload не позволяет вам много времени, прежде чем он начнет выгружать страницу.

Кстати, есть два различных сценария с onbeforeunload:

  • Если вы возвращаете строку внутри события onbeforeunload, он создает всплывающее окно, которое вы имели в виду. Проблема здесь в том, что при всплывающем окне у вас не будет достаточно времени для выполнения кода
  • Другой вариант ничего не возвращает. Вместо этого вызовите методы выхода из системы. Это должно дать ваш код достаточно времени, чтобы выполнить до закрытия

я на самом деле был вопрос очень похож на этот, и в конечном итоге решить это сам: How to logout during onbeforeunload/onunload using Javascript

В своем вопросе вы заявляете, что вы хотите иметь прогресс отображается, когда они выходят из системы. Это невозможно сделать, когда пользователь закрывает браузер. На данный момент они закрывают свое окно, вы потеряли все управление, кроме как в onbeforeunload (и onunload, но не используете это), и поэтому ваш код должен быть выполнен там. С учетом сказанного вы можете привязать кнопку выхода из системы (я предполагаю, что у вас ее есть в приложении) и отобразить индикатор выполнения.

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

Смежные вопросы