注册|登录

联系电话:024-31891684  13390130939
沈阳软件公司--沈阳软件定制

沈阳软件开发_沈阳软件公司_沈阳软件定制/软件/最新技术

Latest technology最新技术

AS3.0中addCallback用法

浏览量:7695

在AS3编程中,如果我们要JavaScript来调用AS3中的函数,常用的方法就是使用ExternalInterface类中的addCallback方法。该方法官方解释如下:将 ActionScript 方法注册为可从容器调用。 成功调用 addCallBack() 后,容器中的 JavaScript 或 ActiveX 代码可以调用在 Flash Player 中注册的函数。

在AS3中,该方法的原始定义如下

public static function addCallback(functionName:String, closure:Function):void

他有2个参数,第二个参数指的是AS3中需要调用的函数名,第一个参数则是JS中调用的函数名,我们看AS3中关于这个函数的使用帮助中有如下说明:

在包含 SWF 文件的 HTML 页中,在该文件的 object 标签中设置以下参数:

<param name="allowScriptAccess" value="always" />

在 SWF 文件中,添加以下 ActionScript:

flash.system.Security.allowDomain(sourceDomain )

这2个说明其实是为了解决安全沙箱的问题,但是实际使用中,我们常常还会遇到更加头疼的问题。

比如AS3中有个函数叫

showMC(mc:MovieClip):void;

我们使用

ExternalInterface.addCallback("showMC" , jsshowMC) ;

来注册一个外部接口函数,ok,我们同样设置allowScriptAccess为always和allowDomain(*),但是JS经常还是会报错:jsshowMC is not a Function,这是为什么呢?进过多次试验,原来才发现,AS3中,如果需要使用addCallback函数来注册外部函数接口,那么必须是当前的swf完全加载完毕才能注册成功,如果还在当前swf加载的过程中就在JS中调用的话肯定会因为找不到函数而报错。

解决办法有几个,一个是swf尽可能的小,提高加载速度,当然这个指标不治本,那么,我们可以在JS中来判断所调用的函数是否有效,如果所调用的函数未定义,那么我们就等待,比如我们可以用一个Timer:setTimeout("checkFuncName()",100);每隔100毫秒来调用checkFuncName检测函数是否有效,checkFuncName里我们可以写检测函数是否是undefined,如果是就继续循环。

沈阳团购网|营口网站制作|沈阳软件公司|软件定制|网站建设|加盟易势|提交问题