2010-12-08 1 views
3

Я использую следующий фрагмент кода, чтобы определить закрытие окна браузера, и он отлично работает. Но проблема возникает, когда пользователь обновляет страницу с помощью кнопки «F5» или кнопки обновления браузера браузера, и даже в этом случае вызывается один и тот же фрагмент кода.Различие между F5 и событием закрытия браузера в flex/actionscript

Я хотел бы знать, если есть в любом случае, с помощью которого я могу различать браузер близко события и обновить событие с помощью ActionScript

package utils 
{ 
import flash.external.ExternalInterface; 

public class ExternalInterfaceUtil 
{ 
    public static function addExternalEventListener(qualifiedEventName:String, callback:Function,callBackAlias:String):void 
    { 
     // 1. Expose the callback function via the callBackAlias 
     ExternalInterface.addCallback(callBackAlias, callback); 
     // 2. Build javascript to execute 
     var  jsExecuteCallBack:String = "document.getElementsByName('"+ExternalInterface.objectID+"')[0]."+callBackAlias+"()"; 
     var jsBindEvent:String = "function(){"+qualifiedEventName+"= function(){"+jsExecuteCallBack+"};}"; 
     // 3. Execute the composed javascript to perform the binding of the external event to the specified callBack function 
     ExternalInterface.call(jsBindEvent); 
    } 
} 
} 

Зова выше утилиты осуществляется

ExternalInterfaceUtil.addExternalEventListener (» window.onunload ", handleLogout," unloadFlex ");

+0

Я довольно уверен, это событие HTML OnUnload будет срабатывать каждый раз, когда пользователь покидает страницу. Обновление страницы, по сути, оставляет ее и возвращается обратно в одно и то же место. Я подозреваю, что вы ничего не можете сделать. Почему вас волнует один способ уйти, но не другой? – JeffryHouser

+0

, когда я закрываю браузер, я хочу вызвать обработчик выхода, но я не хочу, чтобы то же самое происходило, когда пользователь обновлял экран. – Arun

ответ

1

псевдокоде:

public static function addExternalEventListener(qualifiedEventName:String, callback:Function,callBackAlias:String):void 
{ 
    if(lastKeyPressed.KeyCode != 116) 
    { 
    // 1. Expose the callback function via the callBackAlias 
    ExternalInterface.addCallback(callBackAlias, callback); 
    // 2. Build javascript to execute 
    var  jsExecuteCallBack:String = "document.getElementsByName('"+ExternalInterface.objectID+"')[0]."+callBackAlias+"()"; 
    var jsBindEvent:String = "function(){"+qualifiedEventName+"= function(){"+jsExecuteCallBack+"};}"; 
    // 3. Execute the composed javascript to perform the binding of the external event to the specified callBack function 
    ExternalInterface.call(jsBindEvent); 
} 
} 
+0

Плюс один для творческого решения проблемы, но как вы получаете последнийKeyPressed в AS3 или JavaScript? Как это повлияет на нажатие кнопки обновления? Что происходит, когда пользователь нажимает F5, затем закрывает окно браузера? – JeffryHouser

+0

На самом деле, теперь, когда я смотрю на это, это очень неправильный ответ. Я бы поставил проверку lastKeyPressed на обработчик, а не на то, где мы добавляем слушателя. –

0

Запись на каждые несколько секунд текущее местное время, общий объект.

Если это существует в течение (последних нескольких секунд + x), это было обновление, а не закрытие.

Позвольте мне знать, если вам нужно несколько примеров кода

:)

+0

Не уверен, что я получил этот. Но проблема была решена с использованием API входа в ChannelSet, который поставляется с BlazeDS. Для этого нам нужно определить наш собственный loginCommand класс под тегом безопасности services-config.xml, который фактически выполнит аутентификацию. На вызове flex end.login() вызовет API doAuthentication, определенный в реализации LoginCommand. При каждом закрытии браузера аутентификация сбрасывается на сервере. – Arun