Wie kann ich erkennen, ob eine Flex-App den Fokus verliert?
-
09-06-2019 - |
Frage
Im Anschluss an diese Frage: Wie verhindere ich bei der Entwicklung einer Online-Prüfungsanwendung Betrüger?
Kann ich erkennen, wenn die Flex-Anwendung ihren Fokus verliert?Das heißt, wenn ein Benutzer auf eine andere Anwendung geklickt oder einen Browser-Tab geöffnet hat?
Ich lese das: Erkennen, wenn eine Flex-Anwendung den Fokus verliert war aber nicht ganz klar...
Lösung
Der Schlüsselteil des Codes unter diesem Link ist der
systemManager.stage.addEventListener(Event.DEACTIVATE,deactivate);
Der Flash-Player sendet Aktivierungs- und Deaktivierungsereignisse, wenn der Fokus in den Player gelangt und ihn verlässt.Sie müssen lediglich einen Zuhörer für sie erstellen und angemessen reagieren.
Ein klareres Beispiel für die Verwendung von Aktivierungs- und Deaktivierungsereignissen finden Sie unter blog.flexaxamples.com.
Außerdem sieht es so aus, als ob die Aktivierungs- und Deaktivierungsereignisse in einigen Browsern Probleme bereiten. Colin Moock hat hier weitere Informationen dazu.
Andere Tipps
Sie können im Hauptanwendungs-Tag einen Handler für die Aktivierung hinzufügen.Dies erkennt, wann immer die Flex-Anwendung fokussiert wird.Z.B:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle"
backgroundColor="white"
activate="activateHandler(event);"
deactivate="deactivateHandler(event);">
Dies funktioniert, um zu erkennen, wann das Flex-Fenster den Fokus verliert, aber um zu erkennen, wann das Fenster den Fokus wiedererlangt, ohne tatsächlich auf die Flex-App klicken zu müssen, ist ein Update im HTML-Wrapper erforderlich, richtig?Etwas wie:
<script language="JavaScript" type="text/javascript">
<!--
// -----------------------------------------------------------------------------
// Globals
// Major version of Flash required
var requiredMajorVersion = ${version_major};
// Minor version of Flash required
var requiredMinorVersion = ${version_minor};
// Minor version of Flash required
var requiredRevision = ${version_revision};
// -----------------------------------------------------------------------------
// -->
function onAppFocusIn()
{
${application}.onAppFocusIn();
alert("onAppFocusIn");
}
</script>
<body scroll="no" onFocus="onAppFocusIn()">
Ich versuche, dies zu implementieren, aber die Funktion onAppFocusIn() wird nicht ausgeführt, sobald ich zum Flex-App-Fenster zurückkehre.Wenn ich mir die Quelle ansehe, ist der Code da.Weiß jemand warum??
Danke, Annie
In Flex 4.6 funktioniert dieser Befehl systemManager.Stage.AdDeVentListener (Event.deactivate, deaktiviert) jedoch sicher, dass die Flash -App WMODE auf Fenster eingestellt ist (Standard).Wenn der Wmode transparent war, wurde das Ereignis nicht abgefangen.Sie legen den Wmode im eingebetteten HTML fest, in dem Sie Ihre Flash-App ablegen.Beispiel:
<object classid="clsid:D27WEE-A16D-21cf-90F2-422253540410" width="100%" height="100%"
id="MyApp" name="MyApp" align="middle">
<param name="movie" value="MyApp.swf?v=1.00.008" />
<param name="wmode" value="transparent"> <----- take out this
...