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操作Select选择的Text和Value(获取/设置/添加/删除)
Mar 06 Javascript
使用JS读秒使用示例
Sep 21 Javascript
js 处理数组重复元素示例代码
Dec 27 Javascript
理解Javascript文件动态加载
Jan 29 Javascript
Flask中获取小程序Request数据的两种方法
May 12 Javascript
vue.js $refs和$emit 父子组件交互的方法
Dec 20 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
Feb 24 Javascript
解决vue-cli webpack打包后加载资源的路径问题
Sep 25 Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
Mar 01 Javascript
koa2+vue实现登陆及登录状态判断
Aug 15 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
Sep 17 Javascript
layui switch 开关监听 弹出确定状态转换的例子
Sep 21 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的开合式多级菜单程序
2006/10/09 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
2015/12/07 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
2016/09/11 PHP
PHP递归遍历指定文件夹内的文件实现方法
2016/11/15 PHP
laravel中命名路由的使用方法
2017/02/24 PHP
php-fpm添加service服务的例子
2018/04/27 PHP
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
基于canvas实现的钟摆效果完整实例
2016/01/26 Javascript
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
2017/01/11 Javascript
bootstrap中添加额外的图标实例代码
2017/02/15 Javascript
jQuery+CSS实现的table表格行列转置功能示例
2018/01/08 jQuery
javascript History对象原理解析
2020/02/17 Javascript
Vue实现简易计算器
2020/02/25 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
[01:15:16]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第一场 1月26日
2021/03/11 DOTA
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
python爬虫获取京东手机图片的图文教程
2017/12/29 Python
Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例
2019/08/01 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
Python GUI库Tkiner使用方法代码示例
2020/11/27 Python
施华洛世奇波兰官网:SWAROVSKI波兰
2019/06/18 全球购物
教师实习的自我鉴定
2013/10/26 职场文书
企业金融服务方案
2014/06/03 职场文书
物业保安岗位职责
2014/07/02 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
运动会广播稿50字-100字
2014/10/11 职场文书
大学生违纪检讨书300字
2014/10/25 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
办公室主任岗位职责范本
2015/03/31 职场文书
邮政营业员岗位职责
2015/04/14 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
2021/10/16 Python