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

posted @ 2010-12-06 23:55  魔豆  阅读(1918)  评论(0编辑  收藏  举报