AS3.0 与网络通信

 Flash 之所以能够有着越来越大的发展空间, 其良好的数据交互功能也起着极为重要的作用. 在 ActionScript 3.0 中,所有的与外部数据进行交互的功能都被放在 flash.net.*包中,有专门 的类进行管理,而且实现了流程的的标准,统一,使 Flash 与外界数据的交互更加的清晰与 简单. 本章讲着重介绍 ActionScript 3.0 与外界数据交互的原理,Flash 与外部数据的连接和交互以 及 Flash 与计算机本地数据的交互操作. 1.数据通信基础 在创建复杂的 ActionScript 3.0 应用程序时,通常需要与服务器端脚本进行通信,或者从外部 XML 文件或文本文件加载数据. 在 ActionScript 3.0 中,使用 URLLoader 和 URLRequest 类来加载外部文件.加载成功的文件 可使用特定类来访问数据,具体使用何类,取决于加载数据的数据类型.比如如果加载数据 的格式为名称值对类型,则可以使用 URLVariables 类来分析服务器结果.如果加载的文件是 外 部 XML 文 档 , 则 可 以 使 用 XML 类 的 构 造 函 数 , XMLDocument 类 的 构 造 函 数 或 XMLDocument.parseXML()方法来分析 XML 文档. 本节讲介绍数据通信的原理, 从外部文件或服务器脚本中加载数据和将数据发送到服务器脚 本方法. 1)构建通信请求过程 在 ActionScript 3.0 中,要实现一个网络通信,需要三个过程来实现,具体为: (1)使用 URLRequest 创建通信请求对象. (2)使用通信请求对象,创建 URLLoader 载入对象,并发出请求的要求. (3)监听 URLLoader 对象,在响应完成事件后,返回要处理的数据. 下面来逐步介绍通信的过程和方法. 1.构建通信请求对象 2.发出数据请求 3.获取返回数据 2)加载文本格式数据 文本格式数据包括:普通文本,XML,HTML 等以 UTF-8 字符组成的字符串文本都属于文本 格式. 下面的示例实现从外部的 test.html 文件种读取数据,并把它显示在文本框中,实现读取外 部 html 网页格式文本的效果.test.html 文本内容如图所示.

 

3)加载值对格式数据 如果要加载的外部文本时值对格式的数据,并且以 URL 形式编码,则需要将 URLVariables 的

 

dataFormat 类型设置为 URLLoaderDataFormat.VARIABLES. 一般的值对格式的数据样式如下所 示. variable1=value1&variable2=value2. 下面的示例实现从外部的 test.txt 文档中取得值对格式的数据, 并在 Flash 中使用文本进行显 示.test.txt 文档内容如下所示. 标题=AS3.0 基础教材&作者=浪子啸天&支持网站=http://www.flasc.cn 4)加载二进制格式数据 二进制文件是指包含在 ASCII 及扩展 ASCII 字符中编写的数据或程序指令的文件.计算机文 件基本上分为二种:二进制文件和 ASCII(也称纯文本)文件,图形文件及文字处理程序等 计算机程序都属于二进制文件.ASCII 则是可以用任何文字处理程序阅读的简单文

本文件. 在 ActionScript 3.0 中,二进制文件主要是为了强调与文本文件的区分,大部分的非文本格式 文件都被归为二进制文件.在 ActionScript 3.0 中,所有的图像,SWF 文件都可以以二进制格 式载入,以 ByteArray 字节数组来表示,此数组储存在 URLLoader 对象的 data 属性中. 5)发送数据 如果需要向服务器发送数据,可以有两种方式可供选择:一是若只是发送不需要返回数据, 则可以使用 sendToURL()方法来实现,其用法格式如下: sendToURL(req:URLRequest) 二是既需要发送数据,也需要返回数据,则使用 Loader 对象的 load()方法来实现.通常的数 据发送需要执行下面的两步操作: (1)将需要提交的数据放入 URLRequest 对象的 data 属性中,然后使用 URLLoader 对象的 load()方法发送数据. (2)从 URLLoader 对象的 data 属性中获取返回的数据并分析. 下面的示例实现将 Flash 中的数据发送到后台的 asp 文件中,并返回响应的数据信息. 6)打开外部链接效果 在 ActionScript 3.0 中,要在 Flash 中打开网址,需要使用 flash.net 包中的 navigateToURL()函 数来实现.其用法格式如下所示. navigateToURL(request:URLRequest, window:String = null) 说明:此方法实现在包含 Flash Player 容器的应用程序中,通常是在一个浏览器中,打开或 者替换一个窗口. 参数说明如下: request:URLRequest 对象,指定要链接到哪个 URL 网页地址. window:浏览器窗口或 HTML 帧,其中显示 request 参数指示的文档.可以输入某个特定窗 口的名称, 或者是下面的 4 个值之一: "_self" 指定当前窗口中的当前帧打开网页; "_blank" 指定一个新窗口打开网址; "_parent"指定当前窗口的父级窗口打开网址; "_top"指定当 前窗口中的顶级框架中打开网址. 2.与 JavaScript 通信 在 Flash 应用程序中,常常使用 Web 浏览器作为宿主程序,以实现 Flash Player 播放器与外 部数据之间的数据交换. ActionScript 3.0 中, 在 使用 ExternalInterface 类实现 Flash 和 JavaScript 脚本进行交互操作.本节将介绍 Flash 到 JavaScript 和 JavaScript 到 Flash 的数据交互的实现 方法.

 

ExternalInterface 类是 Flash 外部的应用程序的编程接口, 是一个能够在在 ActionScript 和 Flash Player 容器(通常为 Web 浏览器)之间实现直接通信的应用程序编程接口.使用此接口, 可以实现包含 JavaScript 的 HTML 页与 ActionScript 之间的通信. 在 Flash Player 中,可以使用 HTML 页中定义的的 JavaScript 来调用 ActionScript 函数. ActionScript 函数可以返回一个值,JavaScript 会立即接收它作为该调用的返回值. 1)JavaScript 脚本简介 JavaScript 是一种基于对象和事件驱动并具有安全性能的脚本语言,此语言可以被嵌入到 HTML 文件之中.使用 JavaScript,可使网页变得生动,能够重复使用同一段代码,能够使与 HTML 文断简化,减少下载时间. java

Script 语言有很多优点,具体如下: 1.使用简单 2.动态交互 3.跨平台操作 4.节约页面资源 2)在网页中加入 JavaScript 有两种方法可以实现在网页中加入 JavaScript 代码,分别为:直接加入 HTML 文档和间 接引用 js 文件. 1.直接加入 HTML 文档 2.间接引用 js 文档

 

3)Flash 向 JavaScript 传递数据 要实现 Flash 向 JavaScript 传递数据, 可以使用 ExternalInterface 类的 call()方法采用异步调用 的方式调用 JavaScript 的函数来实现.所谓的异步调用,指的是无需等待函数的返回值就让 操作继续进行的函数调用方式. ExternalInterface 类的 call()方法,语法格式如下所示. call(functionName:String,...arguments) 说明:此方法为 FlashPlayer 容器公开的函数,不传递参数或传递多个参数.如果该函数不 可用,调用将返回 null;否则,它返回由该函数提供的值. 4)JavaScript 向 Flash 传递数据 要实现 JavaScript 向 Flash 传递数据,可以使用 ExternalInterface 类的 addCallback()方法将 ActionScript 中的函数注册为可以从容器中进行调用.成功调用 addCallBack()后,在容器中使

 

用 JavaScript 或 ActiveX 代码可以调用在 Flash Player 中注册的函数. ExternalInterface 类的 addCallback()方法,语法格式如下所示. addCallback (functionName:String, closure:Function) functionName:要在容器中调用的函数的函数名称. 要调用的 closure 函数.其可能是一个独立的函数,或者可能是引用对象实例方法的 closure 方法.通过传递 closure 方法,可以将回调定向到特定对象实例的方法. 利用 JavaScript 向 Flash 传递数据的过程,可以实现下面的操作: 调用 ActionScript 函数. 使用标准的函数调用表示法传递参数. 将值返回给 JavaScript 函数. 3.So 本地数据存储 Flash 影片运行过程中,大多数的数据都存储于影片本身,一旦影片被关闭,这些数据也就 从内存中被清除掉,下次运行时,数据将从头开始.若想存储数据或者让客户端的多个影片 共享同一组数据,就要想办法把数据存储在 Flash 播放器之外. 在 ActionScript 3.0 中,SharedObject 类实现了在客户端机器中持久性存储数据.有两种类型 的共享对象:本地和远程.本节主要介绍在本地储存数据. 1)创建 ShareObject 对象 Flash 的 ShareObject 对象一般简称为 SO,类似于 Web 浏览器中的 cookies.它们被一些开发 者称为 "超级 cookies" 因为 SO 可以存储大量数据, , 且存储和读取的都是原生的 ActionScript 类型数据. ShareObject 对象默认的空间大小 100KB,用户可以通过 FlashPlayer'sSettingsManager 控制的 使用空间大小, 来严格限制被使用的空间. 存储在本地计算机的 SO 文件是一种二进制文件, 扩展名为.sol.不同的 SWF 影片可以通过 flash.net.SharedObject 类进行读写.sol 文件. 创建的.sol 文件被放置在 Flash 播放器对应的应用程序数据目

录, Windows 为例, 以 目录为: C:\Documents and Settings\Administrator\Application Data\Macromedia\Flash Player\#SharedObjects,在此主目录下使用随机字符命名目录,记录数据. 2)向 SO 上写入数据 要实现添加数据到 SO 上,只需给 SO 对象的 data 属性添加属性值.共享对象 SO 有个内建 的属性 data, data 属性类型为 object, 因而可以添加任何信息上去. 如下面的示例代码所示. //存储 username 值给 so 共享对象 so.data.username= "浪子啸天"; 注意:既不能直接向 SO 共享对象赋值,也不能直接向 SO 共享对象的 data 属性赋值,这样 的结果都是错误的. 如下面的两行写入数据的方法都是错误的,错误代码如下所示. so.username="浪子啸天"; so.data="浪子啸天"; 3)读取 SO 数据 要实现在客户端读取 SO 数据,原理很简单.因为这些持久性数据都保存在共享对象的 data 属性里,只需要访问 Data 对象的相关属性就 Ok 了.

posted @ 2013-05-28 10:57  AS3_赵敏  阅读(481)  评论(0编辑  收藏  举报