Как выйти из системы во время onbeforeunload/onunload с помощью Javascript

<script type="text/javascript">

window.onbeforeunload=before;
window.onunload=after;

function before(evt)
{
   var message="If you continue, your session will be logged out!";
   if(typeof evt=="undefined"){
      evt=window.event;
   }
   if(evt){
      evt.returnValue=message;
   }
}

function after()
{
   var flex=document.${application}||window.${application};
   flex.unloadMethod(); //calls the flex class containing the "unloadMethod()" which
                        //calls the logout.jsp that does the actually dropping of credentials
}

</script>

Итак, вот моя мысль: когда пользователь щелкнет назад, обновит или закроет окно, появится стандартное всплывающее окно onbeforeunload вместе с текстом, расположенным в моей переменной сообщения. Затем, если пользователь нажмет кнопку «Отмена», событие onunload не будет выполнено, и пользователь останется на текущей странице. Но если пользователь нажимает «ОК», должно срабатывать событие onunload, которое затем выполняет мои классы выхода из системы.

Вот что происходит: всплывающее окно появляется, когда это необходимо, и кнопка «Отмена» также работает. Но если пользователь нажимает «ОК», кажется, что событие onunload срабатывает слишком быстро, чтобы мои классы выхода из системы могли выполняться, потому что оно никогда не выводит их из системы.

Я знаю, что мои классы выхода работают, потому что, если я просто вызову свой flex.unloadMethod в onbeforeunload, он отключит их.

Я исследовал это уже неделю, и кажется, что я близок, но я что-то кладу не в то место. Если у вас есть примеры или советы, буду признателен.


person Brian    schedule 17.05.2013    source источник
comment
Скорее всего, проблема возникает из-за того, что браузер не дает обработчикам событий достаточно времени для выполнения своей работы. Поскольку пользователь уходит, вы хотите выполнять как можно меньше кода в этих сценариях, чтобы дать вашему коду достаточно времени для завершения. Я бы попробовал запустить ваш logout.jsp с помощью вызова AJAX из Javascript, а не из Flash.   -  person Sunil D.    schedule 22.05.2013
comment
Да, спасибо за комментарий. Теперь я понимаю, что то, что я хотел сделать, кажется просто невозможным. Вместо этого я собираюсь полностью обойти всплывающее окно, чтобы мой logout.jsp выполнялся. (см. ответ) Еще раз спасибо за ваш ответ!   -  person Brian    schedule 22.05.2013


Ответы (1)


Итак, я выяснил некоторые проблемы с моим вопросом с помощью Sunil D. Событие onunload срабатывает слишком быстро, чтобы мое событие могло быть запущено, поэтому я решил не включать предупреждающее сообщение, а просто отключил пользователя. все вместе, используя событие onbeforeunload:

<script type="text/javascript">

window.onbeforeunload=before;
window.onunload=after;

function before(evt)
{
   var flex=document.${application}||window.${application};
   flex.unloadMethod(); //calls the flex class containing the "unloadMethod()" which
                        //calls the logout.jsp that does the actually dropping of credentials
}

function after(evt)
{

}

</script>
person Brian    schedule 22.05.2013