Se esta querendo aprender ou iniciar novos projetos em Flex, clique aqui

A integração com o Browser precisa necessariamente do Javascript para funcionar. ExecutarJavaScript com o ExternalInterface é fácil, e o contrário também, e vou demonstrar aqui a simplicidade.

Antes de tudo precisamos registrar o método no Flex que deve ser acessado no JavaScript. Para isso utilizamos o método addCallback() do ExternalInterface.

private function init():void
{
    ExternalInterface.addCallback("chamaAlert", alert);
}

private function alert(msg:String):void
{
    Alert.show( msg )
}

A função init() é invocado pelo createComplete do Application e registra que quando chamar no JavaScript a função chamaAlert esta deve invocar a a função alert do Flex.

Veja abaixo como será a função no JavaScript

<input value="Clique Aqui para enviar um alert para o Flex"
       onClick="chamarAlertNoFlex()" type="button"/>

<script language="JavaScript" type="text/javascript">
function chamarAlertNoFlex()
{
    getPlayer().chamaAlert("Ola do JavaScript");
}

function getPlayer() {
    var o = document.getElementsByTagName("object");
    var e = document.getElementsByTagName("embed");
    if (e.length > 0 && typeof e[0].SetVariable != "undefined") {
        window.alert('01')
        window.alert( e[0].name )
        return e[0];
    }
    if (o.length > 0 && typeof o[0].SetVariable != "undefined") {
        window.alert('02')
        if (navigator.appName.indexOf("Microsoft") != -1) {
            return window[ o[0].id ];
        } else {
            return document[ o[0].id ];
        }
    }
    if (o.length > 1 && typeof o[1].SetVariable != "undefined") {
        window.alert('03')
        window.alert( o[1].id )
        return o[1];
    }
    return undefined;
}
function getPlayerName( name ) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[ name ];
    } else {
        return document[ name ];
    }
    return undefined;
}
</script>

Quando clicar no botão, é chamado a função chamarAlertNoFlex que chama chamaAlert registrado no Flex. Veja que ele chama esta função do método getplayer(). O método getPlayer() devolve o objeto flex que esta no HTML.

Veja que o getPlayer() pega o primeiro SWF que encontra-se na página HTML e se tivermos mais de um precisamos usar a função getPlayerName e e passar o Application que queremos referenciar.

Veja abaixo o exemplo funcionando.

Fonte esta disponível aqui.

Gostou? Não esqueça de curtir!

Ou compartilhe o link com seus amigos

4 comentários

Deixe uma resposta

  1. Usar a interação JavaScript / ActionScript, seria o mesmo que andar em uma montanha-russa sem sinto de segurança. rrrsss...

    Se o programador não tiver muita atenção com segurança na aplicação Flex, com certeza ele vai ter muita adrenalina, friozinho na barriga, ou melhor, enormes dores de cabeça.

    Excelente post!
    Parabéns!

    Fiquem com Deus!

     
  2. Parabens pelo exemplo
    simples e prático

     
  3. caramba!!!

    babei!!! hehehe

    parabéns

     
  4. Show de bola os exemplos!!
    Parabéns por exemplificar ao máximo pra galera entender!

    Grande Abraço