AS3编程中ExternalInterface.addCallback的使用
2012-02-06 12:14:58 来源:本站整理在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,如果是就继续循环。
这个问题曾经困扰了我1个小时,刚开始一直以为是安全沙箱的限制,最后才发现是因为swf未加载完毕导致函数没有注册,希望有类似情况的朋友不妨试一试。
Tags:AS 编程 ExternalInterface
编辑录入:coldstar [复制链接] [打 印]- ››asp.net页面弄成伪静态页面
- ››Asp.net 中将汉字转换成拼音的方法
- ››ASP.NET及JS中的cookie基本用法
- ››ASP.NET获取MS SQL Server安装实例
- ››asp.net实现调用百度pai 在线翻译英文转中文
- ››ASP.NET页面选项进行提示判断
- ››Asp.net定时执行程序
- ››ASP.NET中利用DataList实现图片无缝滚动
- ››ASP.NET验证控件RequiredFieldValidator
- ››ASP.NET中使用System.Net.Mail发邮件
- ››ASP.NET中获取用户控件中控件的ID
- ››ASP.NET中FileBytes写成文件并存档
更多精彩
赞助商链接