Flex4中调用网页的Javascript,以及通过网页中的javascript调用ActionScript
Flex调用网页的Javascript
Flex中代码:
ExternalInterface.call("func",""); ExternalInterface.call("func2","aa","bb");
Javascript中代码:
<script type="text/javascript"> function func() { alert(123); } function func2(parm1,parm2) { alert(parm1); alert(parm2); }
网页中的javascript调用Flex中的代码
Flex代码:
// 先写一个普通的ActionScript脚本 private function callback1():void { Alert.show("abc"); } // 通过addCallback注册脚本 protected function application1_creationCompleteHandler(event:FlexEvent):void { ExternalInterface.addCallback("callback1",callback1); }
网页中javascript代码:
<script type="text/javascript"> // 得到flash对象,通过对IE,FireFox,谷歌的测试,不过我试的这几个浏览器都能找到document[movieName],不过还是留着剩下的判断,说不定在某些浏览器可以派上用场 function getSWFObject(movieName) { if(document[movieName]) { return document[movieName]; }else if(window[movieName]){ return window[movieName]; }else if(document.embeds && document.embeds[movieName]){ return document.embeds[movieName]; }else{ return document.getElementById(movieName); } } // 然后下面的代码就可以执行Flex里面的脚本了 getSWFObject("test40").callback1(); </script>
如果在Flash没有加载完成时,执行Flex里面的脚本是找不到的,会报错。在网页的onload事件执行也不保险,通过网页的onload事件执行Flex的脚本,很多浏览器都通不过测试,原因是网页在加载完成时,Flash很有可能并没有加载完成。
在网页上可以通过PercentLoaded()函数来判断Flash是否加载完成,可是这个函数在FireFox下是不支持的。在不考虑支持FireFox的前提下,可以考虑使用PercentLoaded()函数,写法可以参考文章:http://www.cnblogs.com/envelope/archive/2010/04/12/1710216.html
如果需要考虑FireFox的话,我的思路是:在Flex加载完成时,就是Flex的creationComplete事件调用一个网页的javascript,通知网页,Flash已经加载完毕了,这个方法可能比较笨,不过是可行的。谁有更好的方法可以告诉我下,这里先谢谢啦:)