Pergunta

Seguindo esta pergunta: Desenvolvendo um aplicativo de exame on-line, como posso evitar trapaceiros?

Posso detectar quando o aplicativo Flex perde o foco?isto é, se um usuário clicou em outro aplicativo ou abriu uma guia do navegador?

Eu li isso: Detectando quando um aplicativo Flex perde o foco mas não ficou muito claro...

Foi útil?

Solução

A parte principal do código nesse link é o

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

Os envios do Flash player ativam e desativam eventos quando o foco entra e sai do player.Tudo que você precisa fazer é criar um ouvinte para eles e reagir de forma adequada.

Um exemplo mais claro de como utilizar para ativar e desativar eventos pode ser visto em blog.flexaxamples.com.

Além disso, parece que os eventos de ativação e desativação apresentam problemas em alguns navegadores. Colin Moock tem mais informações sobre isso aqui.

Outras dicas

Você pode adicionar um manipulador para ativar na tag principal do aplicativo.Isso detecta sempre que o aplicativo flex entra em foco.Por exemplo:

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

Isso funcionará para detectar quando as janelas Flex perdem o foco, mas para detectar quando a janela recupera o foco sem precisar clicar no aplicativo flex, é necessária uma atualização no wrapper HTML, correto?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()">

Estou tentando implementar isso, mas a função onAppFocusIn() não está em execução quando volto para a janela do aplicativo flexível.Quando vejo a fonte, o código está lá.Alguem sabe por quê??

Obrigado, Annie

No Flex 4.6, este comando funciona SystemManager.Stage.adDeventListener (Event.DeActivate, Desative), mas verifique se o aplicativo flash Wmode está definido como Window (padrão).Quando o wmode era transparente, o evento não era detectado.Você define o wmode no html incorporado onde coloca seu aplicativo flash.exemplo:

<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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top