Javascript acessando métodos do Flex

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.

Fique por dentro de nossas novidades, ideias e atualizações