Как выйти из системы во время onbeforeunload / onunload, используя 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
}


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

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

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

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

 Brian22 мая 2013 г., 16:40
Да, спасибо за комментарий. Теперь я понимаю, что то, что я хотел сделать, кажется, просто невозможно. Вместо этого яЯ собираюсь полностью обойти всплывающее окно, чтобы мой logout.jsp был выполнен. (см. ответ) Еще раз спасибо за ваш ответ!
 Sunil D.21 мая 2013 г., 23:28
Проблема, вероятно, происходит, потому что браузер нена самом деле у вас достаточно времени, чтобы обработчики событий могли выполнять свою работу. Поскольку пользователь уходит, вы хотите выполнить как можно меньше кода в этих сценариях, чтобы дать вашему коду достаточно времени для его завершения. Я бы попробовал запустить ваш logout.jsp с помощью вызова AJAX из Javascript, а не из Flash.

Ответы на вопрос(1)

Решение Вопроса

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



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)
{

}


Ваш ответ на вопрос