JavaScript and ActionScript3
接触JavaScript和ActionScript3也有一段时间了,它们都是应用比较广泛的脚本语言,经过这几年的工作和学习,静下来的时候想总结一些东西,作为技术上的沉淀以及培训所用,所以就有了这篇文章。先来看看二者的同性与差异性:
共同点:
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相关的文章:
chrome、ff下flash的mousewheel事件失效(wmode=transparent)>>
js与as相互调用,一个比较典型的应用:跨浏览器的音乐播放器(列表使用js呈现,swf对外“公开”播放、暂停、停止等方法)
原文:http://www.cnblogs.com/meteoric_cry/archive/2013/04/03/2997991.html
JavaScript and ActionScript3的更多相关文章
- 编程语言 - 脚本编程 - JavaScript/Jquery/Ajax/XML/JSON/ActionScript3
事件处理onmouseover <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g ...
- 【ActionScript】ActionScript3.0对舞台组件的增删改查
以一个样例来说明ActionScript3.0对舞台组件的增删改查 例如以下图: 在Flash执行的时候,通过脚本.斜向下生成text0-text9十个文本节点. 提供两个功能. 1.在右上角,用户输 ...
- JavaScript概念梳理
一.JavaScript 的奇葩命名史 1995 年,网景浏览器(Netscape Navigator)首次发布了一种运行于浏览器端的脚本语言,网景给这个新语言命名为 LiveScript.一年后,为 ...
- HTML5之2D物理引擎 Box2D for javascript Games 系列 第一部分
我要的是能在H5页面上跑的javascript版的Box2D啊!!! 最近想学习Javascript版本的Box2D JS物理引擎,无奈搜了半天也没找到相对比较系统的资料 官方网站也只是简单的介绍,A ...
- 【ActionScript】Flash与网页的交互,ActionScript与JavaScript的交互
Flash是可以轻松与网页交互数据的,不然为何Flash会有这么大的生命力呢?仅仅是这样编程比較麻烦而已,又要调试Flash,然后又要放到server上调试. 只是这种方式可以收到非常好的效果.Fla ...
- Javascript中的类实现
Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的extend或冒号,它也没有用来支持虚函数的virtual,不过,Javascript是一门 ...
- JavaScript数据可视化编程书籍上面的例子(flotr2)
先看demo再看例子 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
随机推荐
- mac上安装ruby
(转:http://www.cnblogs.com/daguo/p/4097263.html) 以下代码区域,带有 $ 打头的表示需要在控制台(终端)下面执行(不包括 $ 符号) 步骤0 - 安装系统 ...
- iOS代理转移
在控制器里面想调用一个视图的子视图的代理方法很简单 1.找到子视图的协议和代理属性 2.给你想调用的控件添加代理属性,遵守的协议和子视图的一样 3.重写代理属性的set方法
- Shell脚本学习指南 [ 第一、二章 ] 背景知识、入门
摘要:第一章介绍unix系统的发展史及软件工具的设计原则.第二章介绍编译语言与脚本语言的区别以及两个相当简单但很实用的Shell脚本程序,涵盖范围包括了命令.选项.参数.Shell变量.echo与pr ...
- 【shell】shell编程(二)-运算符
上篇我们学会了如何使用及定义变量.按照尿性,一般接下来就该学基本数据类型的运算了. 没错,本篇就仍是这么俗套的来讲讲这无聊但又必学的基本数据类型的运算了. 基本数据类型运算 操作符 符号 语义 描述 ...
- 关于gcc内置函数和c隐式函数声明的认识以及一些推测
最近在看APUE,不愧是经典,看一点就收获一点.但是感觉有些东西还是没说清楚,需要自己动手验证一下,结果发现需要用gcc,就了解一下. 有时候,你在代码里面引用了一个函数但是没有包含相关的头文件,这个 ...
- BIM
BIM进入中国已经有十来个年头,随着对BIM概念的深入了解.当前国内BIM应用逐渐由三维模型的可视化应用升级为基于BIM模型的信息进行项目精细化动态管理. 传统粗放的项目管理方法是工程项目难以进行精细 ...
- 50 个 Bootstrap 插件
Bootstrap是快速开发Web应用程序的前端工具包.它是一个CSS和HTML的集合,它使用了最新的浏览器技术,给你的Web开发提供了时尚的版式,表单,buttons,表格,网格系统等等. 本文向你 ...
- BUPT复试专题—网络传输(2014网研)
题目描述 网络的高效互联与智能传输是提升海量用户服务请求映射效率的重要措施.在这个任务中,你需耍在最小的传输时间内,将数据源传输到指定的网络节点中.我们给定的网络一共包含N个节点,其中节点1为数据源. ...
- elasticsearch学习网站
elasticsearch学习网站 https://elasticsearch.cn/
- SolidEdge 如何绘制零件图的剖视图
1 点击检视-剖面,然后选择剖切面 2 比如要全剖,则绘制好方框之后点返回,选择方向. 选择剖切深度,然后预览即可 一个零件可以进行多次剖切