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 相关文章推荐
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
Aug 21 Javascript
深入探讨前端框架react
Dec 09 Javascript
第九章之路径分页标签与徽章组件
Apr 25 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
Jun 22 Javascript
vue-router:嵌套路由的使用方法
Feb 21 Javascript
jQuery正则验证注册页面经典实例
Jun 10 jQuery
vue2.X组件学习心得(新手必看篇)
Jul 05 Javascript
Electron中实现大文件上传和断点续传功能
Oct 28 Javascript
Vue.js中 v-model 指令的修饰符详解
Dec 03 Javascript
用原生 JS 实现 innerHTML 功能实例详解
Apr 03 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
Jan 26 Javascript
jquery实现点击左右按钮切换图片
Jan 27 jQuery
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
redis 队列操作的例子(php)
2012/04/12 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
2014/09/16 PHP
thinkphp整合微信支付代码分享
2016/11/24 PHP
使用TextRange获取输入框中光标的位
2006/10/14 Javascript
greybox——不开新窗口看新的网页
2007/02/20 Javascript
IE6下JS动态设置图片src地址问题
2010/01/08 Javascript
仿猪八戒网左下角的文字滚动效果
2011/10/28 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
jquery动态添加删除一行数据示例
2014/06/12 Javascript
jQuery图片特效插件Revealing实现拉伸放大
2015/04/22 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
js Canvas绘制圆形时钟效果
2017/02/17 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
2017/02/19 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
2018/06/29 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
vue中子组件传递数据给父组件的讲解
2019/01/27 Javascript
详解Vue2.5+迁移至Typescript指南
2019/08/01 Javascript
vue 实现用户登录方式的切换功能
2020/04/14 Javascript
原生JS实现拖拽功能
2020/12/16 Javascript
使用70行Python代码实现一个递归下降解析器的教程
2015/04/17 Python
详解Python发送邮件实例
2016/01/10 Python
Python基础之循环语句用法示例【for、while循环】
2019/03/23 Python
Python可迭代对象操作示例
2019/05/07 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
python实现梯度下降和逻辑回归
2020/03/24 Python
html5使用Drag事件编辑器拖拽上传图片的示例代码
2017/08/22 HTML / CSS
Spartoo芬兰:欧洲最大的网上鞋店
2016/08/28 全球购物
For Art’s Sake官网:手工制作的奢华眼镜
2018/12/15 全球购物
公共汽车、火车和飞机票的通用在线预订和销售平台:INFOBUS
2019/11/30 全球购物
C有"按引用传递"吗
2016/09/06 面试题
大一自我鉴定范文
2013/10/04 职场文书
物业管理专业个人的自我评价
2013/11/19 职场文书
计算机专业求职信
2014/06/02 职场文书
办公室行政主管岗位职责
2015/04/09 职场文书
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server