2010-12-08 15 views
3

Ich verwende das folgende Stück Code, um die Schließung des Browser-Fensters zu bestimmen, und es funktioniert einwandfrei. Das Problem tritt jedoch auf, wenn der Benutzer die Seite mit "F5" aktualisiert oder auf die Schaltfläche zum Aktualisieren des Browsers klickt, und selbst in diesem Fall wird derselbe Code aufgerufen.Unterscheidung zwischen F5 und Browser schließen Ereignis in Flex/ActionScript

Ich würde gerne wissen, ob es überhaupt von denen ich schließen Ereignis zwischen Browser und aktualisieren unterscheiden kann Ereignis mit 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); 
    } 
} 
} 

Call oberhalb Dienstprogramm von

ExternalInterfaceUtil.addExternalEventListener gemacht wird (“ window.onunload ", handleLogout," unloadFlex ");

+0

Ich bin ziemlich sicher, feuert die HTML onunload Ereignis, wenn der Benutzer die Seite verlässt. Die Seite zu aktualisieren ist im Wesentlichen, sie zu verlassen und direkt an denselben Ort zurückzukehren. Ich vermute, es gibt nichts, was du tun kannst. Warum interessierst du dich für einen Weg zu verlassen, aber nicht den anderen? – JeffryHouser

+0

Wenn ich den Browser schließe, möchte ich den Abmelde-Handler aufrufen, aber ich möchte nicht die gleiche Sache passieren, wenn Benutzer den Bildschirm – Arun

Antwort

1

Pseudo-Code:

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 eins für eine kreative Lösung für das Problem aktualisiert, aber wie erhalten Sie die letzteKeyPressed in AS3 oder JavaScript? Wie würde dies mit dem Klicken auf die Schaltfläche zum Aktualisieren umgehen? Was passiert, wenn der Benutzer F5 drückt und dann das Browserfenster schließt? – JeffryHouser

+0

Eigentlich, jetzt, wo ich es ansehe, ist das eine sehr falsche Antwort. Ich hätte die lastKeyPressed-Prüfung auf den Handler gesetzt, nicht dort, wo wir den Listener hinzufügen. –

0

Schreibe dem gemeinsamen Objekt alle paar Sekunden mit aktuellen Ortszeit.

Wenn das innerhalb (letzte paar Sekunden + x) existiert, war es eher ein Refresh als ein Close.

Lassen Sie mich wissen, wenn Sie einige Code-Beispiele

brauchen

:)

+0

Ich bin mir nicht sicher, ob ich das hier bekommen habe. Das Problem wurde jedoch mithilfe der ChannelSet-Anmelde-API gelöst, die mit BlazeDS bereitgestellt wird. Dazu müssen wir unter dem Security-Tag der services-config.xml eine eigene loginCommand-Klasse definieren, die die Authentifizierung durchführt. Auf dem Flex-End ruft channelset.login() das in der LoginCommand-Implementierung definierte doAuthentication-API auf. Bei jedem Schließen des Browsers wird die Authentifizierung auf dem Server zurückgesetzt. – Arun

Verwandte Themen