ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调
2013-10-30 11:29
501 查看
近期项目中可能要用到Flash存取数据,并与JS互调,所以就看了一下ActionScript 3.0,现把学习结果分享一下,希望对新手有帮助。
Hello World
文件读写
数据存储(SharedObject)
与JS互调
ActionScript 3.0 核心语言有很多新特性:
1、运行时异常处理机制
2、运行时类型
3、密封类
4、闭包方法
5、使用E4X理论处理XML数据
6、正则表达式
7、命名空间
8、新基元数据类型
1、打开Flash CS6,新建一个ActionScript 3.0 文档,保存为HelloWorld.fla
View Code
需要引入import flash.external.ExternalInterface;
1、ActionScript调用JavaScript的方法
这里要用到ExternalInterface类的call方法:
ExternalInterface.call(functionName:String,...arguments):
fuctionName:要调用的JavaScript函数名
arguments:参数,可选
1)不带参数的情况:
2)带参数的情况:
2、JavaScript调用ActionScript的方法
ExternalInterface.addCallback( functionName:String, closure:Function):void
functionName:要注册的函数名
closure:对应的执行函数
示例:
这里有几点需要注意(都是这两天踩过的坑):
1、页面上引入的swf中allowScriptAccess 参数的值要改为 always ,否则AS调JS会不起作用(权限问题):
2、如果直接用Flash CS6的“文件”->“发布预览”->“HTML”命令生成HTML页面,引入的object会有两层,默认只有外层的object标签上有id属性,我们要自己在内层object也加上id属性(值可以自己写),这样做的目地是,我们不知道浏览器最终渲染时用的是哪个object,所以要自己判断,HTML代码如下:
这里内部object的属性 id="FlashJSDemo1"就是我自己加上去的。
在JS中要这样判断:
注:这里的setName是我在AS中定义的,供JS调用的。
在我机子上,用chrome浏览器的测试结果是最终setName绑到了内层object上。
本文DEMO可以点击这里查看。
目录
ActionScript 3.0简介Hello World
文件读写
数据存储(SharedObject)
与JS互调
ActionScript 3.0简介
ActionScript 3.0 是一种强大的面向对象编程语言,ActionScript 3 符合 ECMAScript Language Specification 第三版。它还包含基于 ECMAScript Edition 4 的功能,比如类、包和名称空间;可选的静态类型;生成器和迭代器;以及非结构化赋值(destructuring assignments)。随着 Web应用程序项目需求的增长,也要求 ActionScript 引擎有重大的突破。ActionScript 3 引入了一个新的高度优化的 ActionScript Virtual Machine(AVM2),与 AVM1 相比,AVM2 的性能有了显著的提高。这使 ActionScript 3 代码的执行速度几乎比以前的 ActionScript 代码快了 10 倍。(本段内容来自百度百科)ActionScript 3.0 核心语言有很多新特性:
1、运行时异常处理机制
2、运行时类型
3、密封类
4、闭包方法
5、使用E4X理论处理XML数据
6、正则表达式
7、命名空间
8、新基元数据类型
Hello World
这里用一个简单的例子演示如何开发ActionScript 3.0 程序(IDE为Flash CS6),内容包括添加组件,注册事件,跟踪输出。1、打开Flash CS6,新建一个ActionScript 3.0 文档,保存为HelloWorld.fla
package { import flash.display.MovieClip; import flash.events.MouseEvent; import flash.net.SharedObject; import flash.text.TextFormat; public class ShareObjectDemo extends MovieClip { public function ShareObjectDemo() { btnFuncInit(); // constructor code } private function btnFuncInit():void { var titleTF:TextFormat = new TextFormat(); titleTF.size = 30; lblTitle.setStyle("textFormat", titleTF); var btnTF: TextFormat = new TextFormat(); btnTF.size = 20; btnLoad.setStyle("textFormat", btnTF); btnSave.setStyle("textFormat", btnTF); btnClear.setStyle("textFormat", btnTF); txtContent.setStyle("textFormat", btnTF); btnLoad.addEventListener(MouseEvent.CLICK, loadData); btnSave.addEventListener(MouseEvent.CLICK, saveData); btnClear.addEventListener(MouseEvent.CLICK, clearData); } private function loadData(evt:MouseEvent):void{ var mySo = SharedObject.getLocal("setting"); var setting = mySo.data.setting; if (setting != undefined && setting.length) { txtContent.text = setting; } else { txtContent.text = "暂无数据"; } } private function saveData(evt:MouseEvent):void { var val: String = txtContent.text; var mySo = SharedObject.getLocal("setting"); mySo.data.setting = val; mySo.flush(); } private function clearData(evt:MouseEvent):void { txtContent.text = ""; } } }
View Code
与JS互调
ActionScript 与 JS 互调可能是很多前端开发者比较感兴趣的地方。需要引入import flash.external.ExternalInterface;
1、ActionScript调用JavaScript的方法
这里要用到ExternalInterface类的call方法:
ExternalInterface.call(functionName:String,...arguments):
fuctionName:要调用的JavaScript函数名
arguments:参数,可选
1)不带参数的情况:
//JavaScript: function Show() { alert("I am a js function"); } //ActionScript直接用一条语句调用 ExternalInterface.call("Show");
2)带参数的情况:
//JavaScript: function Show(message) { alert(message); } //ActionScript: ExternalInterface.call("Show","I am a message from AS");
2、JavaScript调用ActionScript的方法
ExternalInterface.addCallback( functionName:String, closure:Function):void
functionName:要注册的函数名
closure:对应的执行函数
示例:
//ActionScript:ExternalInterface.addCallback("Show",OnShow); private function OnShow(message:String):string{ return message; } //JavaScript: function CallAS() { //swfobj是页面引入的swf对象 swfobj.Show("i am a message from js"); }
这里有几点需要注意(都是这两天踩过的坑):
1、页面上引入的swf中allowScriptAccess 参数的值要改为 always ,否则AS调JS会不起作用(权限问题):
<param name="allowScriptAccess" value="always" />
2、如果直接用Flash CS6的“文件”->“发布预览”->“HTML”命令生成HTML页面,引入的object会有两层,默认只有外层的object标签上有id属性,我们要自己在内层object也加上id属性(值可以自己写),这样做的目地是,我们不知道浏览器最终渲染时用的是哪个object,所以要自己判断,HTML代码如下:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="440" height="290" id="FlashJSDemo" align="middle"> <param name="movie" value="FlashJSDemo.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#ffffff" /> <param name="play" value="true" /> <param name="loop" value="true" /> <param name="wmode" value="window" /> <param name="scale" value="showall" /> <param name="menu" value="true" /> <param name="devicefont" value="false" /> <param name="salign" value="" /> <param name="allowScriptAccess" value="always" /> <!--[if !IE]>--> <object type="application/x-shockwave-flash" data="FlashJSDemo.swf" id="FlashJSDemo1" width="440" height="290"> <param name="movie" value="FlashJSDemo.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#ffffff" /> <param name="play" value="true" /> <param name="loop" value="true" /> <param name="wmode" value="window" /> <param name="scale" value="showall" /> <param name="menu" value="true" /> <param name="devicefont" value="false" /> <param name="salign" value="" /> <param name="allowScriptAccess" value="always" /> <!--<![endif]--> <a href="http://www.adobe.com/go/getflash"> <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="获得 Adobe Flash Player" /> </a> <!--[if !IE]>--> </object> <!--<![endif]--> </object>
这里内部object的属性 id="FlashJSDemo1"就是我自己加上去的。
在JS中要这样判断:
var FlashJSDemo1 = document.getElementById('FlashJSDemo'); var FlashJSDemo2 = document.getElementById('FlashJSDemo1'); //这一句就是判断用的是哪个object var FlashJSDemo = FlashJSDemo1.setName != undefined ? FlashJSDemo1 : FlashJSDemo2; FlashJSDemo.setName(name);
注:这里的setName是我在AS中定义的,供JS调用的。
在我机子上,用chrome浏览器的测试结果是最终setName绑到了内层object上。
本文DEMO可以点击这里查看。
相关文章推荐
- [转]ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调
- Flex ActionScript 3.0 SharedObject 用于在用户计算机或服务器上读取和存储有限的数据
- Android本地数据存储之.txt文件存储读写
- Android 存储文件方式之一---SharedPreferences 内容提供者,以xml 的方式进行数据 存储。是一种轻量级的文件数据存储
- Python学习入门基础教程(learning Python)--5.7 Python文件数据记录存储与处理
- Android 数据存储02之文件读写
- 读写存储文件中的数据
- android 使用SharedPreferences对数据存储/删除/读取/文件删除
- Android:数据存储之SharedPreference & 文件
- [ActionScript 3.0] SharedObject的用法简介
- 数据存储之文件读写
- Node.js入门(三)——简单读写文件
- [转]iOS iPhone 开发中的文件读写及数据存储
- 读写存储文件中的数据 二
- Android的数据存储之SharedPreference与文件File
- 【Cocos creator】文件数据读写,用户数据存储
- python数据存储系列教程——xls文件的读写
- IOS iPhone 开发中的文件读写及数据存储(一)
- 如何在python中读写和存储matlab的数据文件(*.mat)
- 如何在python中读写和存储matlab的数据文件(*.mat)