Pregunta

Como seguimiento de esta pregunta: Al desarrollar una solicitud de examen en línea, ¿cómo evito a los tramposos?

¿Puedo detectar cuando la aplicación Flex pierde su enfoque?¿Es decir, si un usuario hizo clic en otra aplicación o abrió una pestaña del navegador?

Leo esto: Detectar cuando una aplicación Flex pierde el foco pero no fue muy claro...

¿Fue útil?

Solución

La parte clave del código en ese enlace es el

systemManager.stage.addEventListener(Event.DEACTIVATE,deactivate);

El reproductor Flash envía eventos para activar y desactivar cuando el foco entra y sale del reproductor.Todo lo que necesitas hacer es crear un oyente para ellos y reaccionar adecuadamente.

Un ejemplo más claro de cómo utilizar los eventos de activación y desactivación se puede ver en blog.flexaxamples.com.

Además, parece que los eventos de activación y desactivación tienen problemas en algunos navegadores. Colin Moock tiene más información sobre eso aquí.

Otros consejos

Puede agregar un controlador para activar en la etiqueta principal de la aplicación.Esto detecta cada vez que la aplicación flexible se enfoca.P.ej:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" verticalAlign="middle" backgroundColor="white" activate="activateHandler(event);" deactivate="deactivateHandler(event);">

Esto funcionará para detectar cuándo las ventanas Flex pierden el foco, pero para detectar cuándo la ventana recupera el foco sin tener que hacer clic en la aplicación Flex requiere una actualización en el contenedor HTML, ¿correcto?Algo como:

<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()">

Estoy intentando implementar esto, pero la función onAppFocusIn() no se ejecuta una vez que vuelvo a la ventana de la aplicación flexible.Cuando veo la fuente, el código está ahí.¿¿Alguien sabe por qué??

Gracias Annie

En FLEX 4.6, este comando funciona SystemManager.stage.addeventListener (event.DeActivate, desactivate) Pero asegúrese de que la aplicación Flash WMode esté configurada en la ventana (predeterminada).Cuando el modo wmode era transparente, el evento no quedaba atrapado.Configura el modo w en el html incrustado donde colocas tu aplicación flash.ejemplo:

<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

...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top