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 相关文章推荐
artdialog的图片/标题以及关闭按钮不显示的解决方法
Jun 27 Javascript
js中reverse函数的用法详解
Dec 26 Javascript
node.js中的querystring.stringify方法使用说明
Dec 10 Javascript
jQuery中的jQuery()方法用法分析
Dec 27 Javascript
javascript实时获取鼠标坐标值并显示的方法
Apr 30 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
Jul 03 Javascript
微信小程序使用gitee进行版本管理
Sep 20 Javascript
2种在vue项目中使用百度地图的简单方法
Sep 28 Javascript
JavaScript类型相关的常用操作总结
Feb 14 Javascript
jQuery - AJAX load() 实例用法详解
Aug 27 jQuery
基于aotu.js实现微信自动添加通讯录中的联系人功能
May 28 Javascript
vue axios封装httpjs,接口公用配置拦截操作
Aug 11 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
PHP 操作文件的一些FAQ总结
2009/02/12 PHP
php清除和销毁session的方法分析
2015/03/19 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
PHP 8新特性简介
2020/08/18 PHP
用函数式编程技术编写优美的 JavaScript_ibm
2008/05/16 Javascript
javascript之通用简单的table选项卡实现(二)
2010/05/09 Javascript
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
2013/04/02 Javascript
jQuery关于导航条背景切换效果实现示例
2013/09/04 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
jQuery调用WebMethod(PageMethod) NET2.0的方法
2016/04/15 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
js给table赋值的实例代码
2016/10/13 Javascript
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
VUE组件中的 Drawer 抽屉实现代码
2019/08/06 Javascript
关于layui的动态图标不显示的解决方法
2019/09/04 Javascript
[06:44]2014DOTA2国际邀请赛-钥匙体育馆开战 开幕式振奋人心
2014/07/19 DOTA
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
进一步探究Python的装饰器的运用
2015/05/05 Python
python 捕获shell脚本的输出结果实例
2017/01/04 Python
python之Character string(实例讲解)
2017/09/25 Python
Python连接Redis的基本配置方法
2018/09/13 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
Python操作Excel的学习笔记
2021/02/18 Python
字中字效果的实现【html5实例】
2016/05/03 HTML / CSS
旅游管理毕业生自荐书
2014/02/02 职场文书
初二生物教学反思
2014/02/03 职场文书
幼儿园教学管理制度
2014/02/04 职场文书
股份合作协议书
2014/04/12 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
优秀高中学生评语
2014/12/30 职场文书
标准发言稿结尾
2019/07/18 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书
python语言中pandas字符串分割str.split()函数
2022/08/05 Python