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已经加载完毕了,这个方法可能比较笨,不过是可行的。谁有更好的方法可以告诉我下,这里先谢谢啦:)

浙公网安备 33010602011771号