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 相关文章推荐
Knockout数组(observable)使用详解示例
Nov 15 Javascript
jquery实现弹出层遮罩效果的简单实例
Mar 03 Javascript
JS根据生日算年龄的方法
May 05 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
Aug 06 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
Nov 23 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
Aug 15 jQuery
Vue自定义过滤器格式化数字三位加一逗号实现代码
Mar 23 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
Jan 08 Javascript
微信小程序结合mock.js实现后台模拟及调试
Mar 28 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
Jun 18 jQuery
Vue登录主页动态背景短视频制作
Sep 21 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
Oct 22 Javascript
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
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
PHP 中使用explode()函数切割字符串为数组的示例
2017/05/06 PHP
JQuery扩展插件Validate 3通过参数设置错误信息
2011/09/05 Javascript
解析使用JS 清空File控件的路径值
2013/07/08 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
javascript 判断整数方法分享
2014/12/16 Javascript
JavaScript中的跨浏览器事件操作的基本方法整理
2016/05/20 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
详解nodejs中的process进程
2017/03/19 NodeJs
基于 flexible 的 Vue 组件:Toast -- 显示框效果
2017/12/26 Javascript
vue父组件点击触发子组件事件的实例讲解
2018/02/08 Javascript
Jquery的autocomplete插件用法及参数讲解
2019/03/12 jQuery
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
如何使用 JavaScript 操作浏览器历史记录 API
2020/11/24 Javascript
[04:53]DOTA2英雄基础教程 祈求者
2014/01/03 DOTA
[00:14]PWL:老朋友Mushi拍VLOG与中国玩家问好
2020/11/04 DOTA
bpython 功能强大的Python shell
2016/02/16 Python
详解python发送各类邮件的主要方法
2016/12/22 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
linux中如何使用python3获取ip地址
2019/07/15 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
2020/02/18 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
2020/04/11 Python
Python装饰器结合递归原理解析
2020/07/02 Python
PyCharm中关于安装第三方包的三个建议
2020/09/17 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
期末学生评语大全
2014/04/24 职场文书
文明班级建设方案
2014/05/15 职场文书
党委书记群众路线对照检查材料思想汇报
2014/10/04 职场文书
运动会200米广播稿
2015/08/19 职场文书
2016年“11.11”光棍节活动总结
2016/04/05 职场文书
自荐信大全
2019/03/21 职场文书
pandas中DataFrame数据合并连接(merge、join、concat)
2021/05/30 Python
我收到了德劲DE1107
2022/04/05 无线电
Java 深入探究讲解简单工厂模式
2022/04/07 Java/Android