2010-12-08 50 views
3

J'utilise le code suivant pour déterminer la fermeture de la fenêtre du navigateur et cela fonctionne parfaitement. Mais le problème se pose lorsque l'utilisateur actualise la page en utilisant "F5" ou en cliquant sur le bouton d'actualisation du navigateur et même dans ce cas, le même morceau de code est invoqué.Différencier entre F5 et le navigateur fermer l'événement dans flex/actionscript

Je voudrais savoir s'il est de toute façon par laquelle je peux distinguer entre l'événement à proximité du navigateur et rafraîchir l'événement en utilisant 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); 
    } 
} 
} 

Appel à l'utilité ci-dessus est fait par

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

+0

Je suis assez sûr, l'événement onunload HTML se déclenche lorsque l'utilisateur quitte la page. Rafraîchir la page revient, en substance, à la quitter et à revenir directement au même endroit. Je suppose que tu ne peux rien faire. Pourquoi vous souciez-vous d'une façon de partir, mais pas de l'autre? – JeffryHouser

+0

lorsque je ferme le navigateur je veux invoquer le gestionnaire de déconnexion, mais je ne veux pas que la même chose se produise lorsque l'utilisateur actualise l'écran – Arun

Répondre

1

Code Pseudo:

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

Plus un pour une solution créative au problème, mais comment obtenez-vous le lastKeyPressed en AS3 ou JavaScript? Comment cela fonctionnerait-il en cliquant sur le bouton d'actualisation? Que se passe-t-il lorsque l'utilisateur appuie sur F5, puis ferme la fenêtre du navigateur? – JeffryHouser

+0

En fait, maintenant que je le regarde, c'est une très mauvaise réponse. J'aurais mis la vérification lastKeyPressed sur le gestionnaire, pas où nous ajoutons l'auditeur. –

0

Ecrire à l'objet partagé toutes les quelques secondes avec l'heure locale actuelle.

Si cela existe dans (dernières secondes + x), il s'agissait d'un rafraîchissement plutôt que de fermer.

Laissez-moi savoir si vous avez besoin d'exemples de code

:)

+0

Je ne sais pas si j'ai eu celui-ci. Mais le problème a été résolu en utilisant l'API de connexion ChannelSet fournie avec BlazeDS. Pour cela, nous devons définir notre propre classe loginCommand sous la balise de sécurité de services-config.xml, qui effectuera réellement l'authentification. Sur l'appel flex end, channelset.login() appellera l'API doAuthentication définie dans l'implémentation de LoginCommand. À chaque fermeture de navigateur, l'authentification est réinitialisée sur le serveur. – Arun