JavaScript与ActionScript3两者的同性与差异性


Posted in Javascript onSeptember 22, 2016

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的flash player(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判断当前浏览器是否安装了flash player,然后获取其版本,是否满足最低flash player的版本,然后动态创建dom节点,并追加到页面中。点击查看《JavaScript检测flash player的版本号》

渲染swf,一般使用swfobject.js (注意swfobject.js的版本,ver1.5与ver2.0+用法上差异较大),相关文档在这里>>

页面传递给swf的参数,有二种方式:

1、路径参数:<param name=”movie” value=”xxx.swf?v….”/> <embed src=”xxx.swf?v…” />

2、使用flashvars:<param name='”flashvars” value=”…” /> <embed src=”xxx.swf” flashvars=”…” />

as3获取参数root.loaderInfo.parameters或stage.loaderInfo.parameters

flex生成的swf通过Application.application.parameters可直接获取

如果使用as3的“壳”加载flex生成的swf,假定as3的“壳”中定义如下的代码:

public var param_obj:Object;
param_obj = this.loaderInfo.parameters;

那么flex生成的swf获取参数的方法:

var system_Obj:Object = Object(SystemManager(SystemManager.getSWFRoot(this)).getTopLevelRoot());
var obj:Object = system_Obj.param_obj;

示例代码(as3):

package { import flash.display.Sprite; import flash.events.Event; import flash.external.ExternalInterface; /** * ... * @author Meteoric_cry */ public class Main extends Sprite { public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point initView(); } private function initView():void { var obj:Object = this.loaderInfo.parameters; var kk:String = obj['kk']; if (ExternalInterface.available) { ExternalInterface.call('alert', kk); } } } }

HTML代码:

<!DOCTYPE html><html><head><title>test</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body><div id='myId'><p><a href="http://www.adobe.com/go/getflashplayer">Get Adobe Flash player</a></p></div><script type="text/javascript" src="swfobject.js"></script> 1: 2: <script type="text/javascript"> 3: var flashvars = { 4: 'kk' : '你才是kk' 5: }; 6: 7: var params = { 8: menu: "false", 9: scale: "noScale", 10: allowFullscreen: "true", 11: allowScriptAccess: "always", 12: bgcolor: "", 13: wmode: "direct" // can cause issues with FP settings & webcam 14: }; 15: 16: var attributes = { 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两者的同性与差异性,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jQuery 剧场版 你必须知道的javascript
May 27 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
Jun 23 Javascript
node.js中watch机制详解
Nov 17 Javascript
js正则表达式匹配数字字母下划线等
Apr 14 Javascript
jQuery中inArray方法注意事项分析
Jan 25 Javascript
浅析Bootstrap验证控件的使用
Jun 23 Javascript
Vue学习笔记进阶篇之单元素过度
Jul 19 Javascript
详解Vue单元测试Karma+Mocha学习笔记
Jan 31 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
May 05 Javascript
JavaScript工具库MyTools详解
Jan 01 Javascript
Vue移动端项目实现使用手机预览调试操作
Jul 18 Javascript
vue如何在data中引入图片的正确路径
Jun 05 Vue.js
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
Sep 22 #Javascript
自制微信公众号一键排版工具
Sep 22 #Javascript
IONIC自定义subheader的最佳解决方案
Sep 22 #Javascript
详解Node.js中的事件机制
Sep 22 #Javascript
AngularJS通过$sce输出html的方法
Sep 22 #Javascript
JavaScript 随机验证码的生成实例代码
Sep 22 #Javascript
D3.js实现雷达图的方法详解
Sep 22 #Javascript
You might like
人工智能开始玩《星际争霸2》 你的操作跟得上吗?
2017/08/11 星际争霸
php你的验证码安全码?
2007/01/02 PHP
Smarty保留变量用法分析
2016/05/23 PHP
在PHP语言中使用JSON和将json还原成数组的方法
2016/07/19 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
2017/06/06 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
JavaScript Event学习第九章 鼠标事件
2010/02/08 Javascript
nodejs教程 安装express及配置app.js文件的详细步骤
2013/05/11 NodeJs
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
javascript基础语法学习笔记
2016/01/04 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
再谈javascript常见错误及解决方法
2016/09/16 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
微信小程序实现简单表格
2019/02/14 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
低版本中Python除法运算小技巧
2015/04/05 Python
Python算法之图的遍历
2017/11/16 Python
python 用lambda函数替换for循环的方法
2018/06/09 Python
Python实现的简单读写csv文件操作示例
2018/07/12 Python
Python Django切换MySQL数据库实例详解
2019/07/16 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
Python pandas 列转行操作详解(类似hive中explode方法)
2020/05/18 Python
Python pip 常用命令汇总
2020/10/19 Python
在线课程:Skillshare
2019/04/02 全球购物
对于没有初始化的变量的初始值可以作怎样的假定
2014/10/12 面试题
生物技术研究生自荐信
2013/11/12 职场文书
体育教育毕业生自荐信
2013/11/21 职场文书
小学教师评语大全
2014/04/23 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
2015年元旦标语大全
2014/12/09 职场文书
总经理检讨书范文
2015/02/16 职场文书
个人工作保证书
2015/02/28 职场文书
理解深度学习之深度学习简介
2021/04/14 Python