JavaScript与ActionScript3两者的同性与差异性
javascript和actionscript是基于什么标准的,大家知道吗?
ActionScript和JavaScript共享一个常用标准:ECMAScript。因此,如果您曾经用JavaScript编写过一个条件(“if语句”)或迭代(“循环语句”),则您可以使用ActionScript。记住JavaScript和ActionScript一样是区分大小写的。
先来看看二者的同性与差异性:
共同点:
a)、二者语法相似,都遵循ECMAScript标准(点击查看ECMAScript5.1中文版);
b)、均可在客户端上运行,是构建RIA应用的较为流行的编程语言;
差异:
a)、二者操作的显示不同:JavaScript操作DOM对象,ActionScript3.0操作的是DisplayObject;
b)、运行环境不同:JavaScript需要JavaScript引擎进行解析、执行,ActionScript3需要Adobe的flashplayer(AVM2)进行解析;
c)、ActionScript3.0引入OOP概念,可使用extends实现继承,而JavaScript只能使用基于原型的方式来实现;
d)、应用的领域有所不同:JavaScript目前主要应用于web页面(PC端、手机终端等),而ActionScript3.0在网页游戏上的应用则比较多;
题外话(个人想法仅供参考):单从报酬上来讲,as3的浮动比js要大,如果你参与开发的一款网页游戏月充值流水超过了五百万(到各大页游平台上看看开服量,单服月充值按5~10W来算,如果开到100组,广告成本页游大概在2~15元/注册人),一般奖金都还比较可观(项目的前后台主程可能多一些,分配比例各公司肯定有自己的协议)。但大多数“创业型”的小公司进行网页游戏开发,难以发展壮大,关门的居多,这就意味着风险较高。而招前端的,大公司的大门随时为你敞开着(薪资也还不错)。希望我在三十岁以前,有机会写一篇亲历参与“创业”的经历,从js前端转as3前端的历程,也算是送给自己三十岁生日的一份礼物:)
关于创业、转岗、管理,有机会一并写出自己的想法,现在还不太成熟,扯远了,还是单纯回到技术上来吧。既然是那些事,那么JavaScript与ActionScript3肯定是有一些交集的,这里以基于浏览器的应用场景来进行归纳:
1、as3获取网页传递过来的参数;
2、js与as3的相互调用;
从“渲染swf”开始讲起,先使用JS判断当前浏览器是否安装了flashplayer,然后获取其版本,是否满足最低flashplayer的版本,然后动态创建dom节点,并追加到页面中。点击查看《JavaScript检测flashplayer的版本号》
渲染swf,一般使用swfobject.js(注意swfobject.js的版本,ver1.5与ver2.0+用法上差异较大),相关文档在这里>>
页面传递给swf的参数,有二种方式:
1、路径参数:<paramname=”movie”value=”xxx.swf?v….”/><embedsrc=”xxx.swf?v…”/>
2、使用flashvars:<paramname='”flashvars”value=”…”/><embedsrc=”xxx.swf”flashvars=”…”/>
as3获取参数root.loaderInfo.parameters或stage.loaderInfo.parameters
flex生成的swf通过Application.application.parameters可直接获取
如果使用as3的“壳”加载flex生成的swf,假定as3的“壳”中定义如下的代码:
publicvarparam_obj:Object; param_obj=this.loaderInfo.parameters;
那么flex生成的swf获取参数的方法:
varsystem_Obj:Object=Object(SystemManager(SystemManager.getSWFRoot(this)).getTopLevelRoot()); varobj:Object=system_Obj.param_obj;
示例代码(as3):
package{importflash.display.Sprite;importflash.events.Event;importflash.external.ExternalInterface;/***...*@authorMeteoric_cry*/publicclassMainextendsSprite{publicfunctionMain():void{if(stage)init();elseaddEventListener(Event.ADDED_TO_STAGE,init);}privatefunctioninit(e:Event=null):void{removeEventListener(Event.ADDED_TO_STAGE,init);//entrypointinitView();}privatefunctioninitView():void{varobj:Object=this.loaderInfo.parameters;varkk:String=obj['kk'];if(ExternalInterface.available){ExternalInterface.call('alert',kk);}}}}
HTML代码:
<!DOCTYPEhtml><html><head><title>test</title><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/></head><body><divid='myId'><p><ahref="http://www.adobe.com/go/getflashplayer">GetAdobeFlashplayer</a></p></div><scripttype="text/javascript"src="swfobject.js"></script>1:2:<scripttype="text/javascript">3:varflashvars={4:'kk':'你才是kk'5:};6:7:varparams={8:menu:"false",9:scale:"noScale",10:allowFullscreen:"true",11:allowScriptAccess:"always",12:bgcolor:"",13:wmode:"direct"//cancauseissueswithFPsettings&webcam14:};15:16:varattributes={17:'id':'xx',18:'name':'xx'19:};20:21:swfobject.embedSWF("http://b.com/js_swf/jsas.swf","myId","100%","100%","9.0.0","expressInstall.swf",flashvars,params,attributes);</script></body></html>
上面的参数“allowScriptAccess”的值有三个:always、sameDomain、never
默认值是:sameDomain,即允许同域下的swf调用js函数,如果设置为never则完全不允许调用,而always则无任何限制,swf可直接调用。
如果更改上面页面的参数allowScriptAccess的值为“sameDomain”,会出现如下的情况:
如果页面需要加载远程的swf文件,如果需要swf让js进行调用,则需要在代码中加上:
Security.allowDomain("*"); Security.allowInsecureDomain("*");
后再进注册:ExternalInterface.addCallback('jsCallback',jsCallback);否则调用将会失败(不会抛出异常)
AS3调用JS所使用的方法:ExternalInterface.call
而JS调用AS3需要在AS3内先“注册”,而且必须要等待swf加载、注册完之后,才能调用它的方法
AS3内进行注册:ExternalInterface.addCallback(‘fnName',fnName);
其中fnName为SWF对外“开放”的接口,而JS直接使用(document[‘swfName']||window[‘swfName']).fnName();调用即可,和调用JS函数一样,需要传递参数直接在函数调用符“()”内加入相应的参数即可。
IE下可通过查看节点工具,查看swf“公开”出来的方法,其它浏览器无法直接查看
之前我也写过一些关于as与js相关的文章:
flash在网页应用中的一些特殊应用场景>>
chrome、ff下flash的mousewheel事件失效(wmode=transparent)>>
js与as相互调用,一个比较典型的应用:跨浏览器的音乐播放器(列表使用js呈现,swf对外“公开”播放、暂停、停止等方法)
以上所述是小编给大家介绍的JavaScript与ActionScript3两者的同性与差异性,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!