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.