纳速健身

标题: 使用JavaScriptProxy实行JavaScript 与 Flash 间通信 [打印本页]

作者: awagink    时间: 2007-12-23 10:53
标题: 使用JavaScriptProxy实行JavaScript 与 Flash 间通信
Javascrīpt 与 Flash 整合工具包

- 关于本项目
- 安装
- 使用
- 系统要求
- 已知问题

*********
关于本项目
*********
使用此 Javascrīpt 与 Flash 整合工具包, Javascrīpt能够调用Actionscrīpt函数(反之亦可),Flash和Html开发者能够借此进行更好的开发。
可以在两种环境下相互通信的主要数据类型包括:
- objects
- arrays
- strings
- numbers
- dates
- booleans
- nulls
- undefined
另外,此 Javascrīpt 与 Flash 整合工具包 能够正常工作于所有主要的浏览器与平台之上(详细内容请参见后面的“系统要求”)。

在以下位置可以找到相关的最新信息和最新版本:
       http://www.macromedia.com/go/flashjavascrīpt

本项目由Macromedia公司的 Christian Cantrell 和 Mike Chambers 开发编写。

******
安装
******
安装  Javascrīpt 与 Flash 整合工具包 非常简易。
只需要将文件 JavascrīptFlashGateway.js 和JavascrīptFlashGateway.swf 从 installation 文件夹复制到网站目录下即可。
放在哪里都可以,但建议将它放在多个项目均可使用的位置。
此工具包Flash方部分的安装要求将 source/flash/actionscrīpt 下的库文件复制到您机器上的 Flash 或者 Flex 的类路径下(译者注:比如D:\Macromedia\Flash MX 2004\zh_cn\First Run\Classes\):
       com/macromedia/javascrīpt/JavascrīptProxy.as
       com/macromedia/javascrīpt/JavascrīptSerializer.as
复制文件时请确保维持以上目录结构不变。

****
使用
****

The Javascrīpt and Flash Integration Kit是MM的Mike Chambers和Christian Cantrell开发的一套用于Javascrīpt和Flash通讯的通用接口程序。通过这套接口,两种语言的大部分数据类型能够被相互支持。之前JS与Flash通讯的方法是通过fsCommand(),这一套程序用到了flash中的LocalConnection对象,支持主流的浏览器平台。

安装和使用方法在配套的文档中已经说得比较清楚了,我这里只是提一些要点。安装文件中JavascrīptFlashGateway.swf就是这套接口能够正常运作的幕后功臣,其作用就是发送基于LocalConnection对象的指令来操作目标Flash。

看看使用这套接口的基本代码,在html页头部加入:

<scrīpt type="text/javascrīpt" src="/path/to/JavascrīptFlashGateway.js"></scrīpt>生成一个id值,建立提供接口服务的FlashProxy对象:

var uid = new Date().getTime(); var flashProxy = new FlashProxy(uid, '/path/to/JavascrīptFlashGateway.swf');在页面中用FlashTag对象代替传统的<object>或<embed>来插入Flash文件:

<scrīpt type="text/javascrīpt">var tag = new FlashTag('/path/to/flashContent.swf', 300, 300); // last two arguments are height and widthtag.setFlashvars('lcId='+uid);tag.write(document);</scrīpt>uid用来配对LocalConnction对象:分别为FlashProxy提供id参数和作为主Flash文件传入的lcId参数。
在JS中要调用Flash中的方法,使用flashProxy对象的call()方法:

flashProxy.call('myActionscrīptFunction', 'my string', 123, true, new Date(), null);该方法在页面上插入JavascrīptFlashGateway.swf文件,并且传入相应的参数。然后这个文件则通过 LocalConnection对象发送指令到连接的Flash文件中。每次调用这个方法,JavascrīptFlashGateway.swf都会重新载入一次(通过改变div的innerHTML)。
主Flash文件还需要建立一个JavascrīptProxy对象来响应JS的调用(其实也就是初始化一个对应的LocalConnection对象):

var proxy:JavascrīptProxy = new JavascrīptProxy(_root.lcId, this);Flash中调用JS比较简单,其实本质上就是用:

getURL("javascrīpt:javascrīptMethodName()");当然还是用JavascrīptProxy类提供的方法来得比较professional一点:

import com.macromedia.javascrīpt.JavascrīptProxy; var proxy:JavascrīptProxy = new JavascrīptProxy(); proxy.call("javascrīptMethodName", "arg1", new Object()); // or proxy.javascrīptMethodName("arg1", new Object());至于两种语言的对象相互转换则分别有FlashSerializer类和JavascrīptSerializer类来做序列化的工作。
总而言之,这一套接口还是LocalConnection的应用,和之前的整合了浏览器功能的Flash导航有异曲同工之妙。这一类型的应用基本上都是通过重载一个Flash文件(用页面刷新或用innerHTML内部刷新)来发送指令更新主Flash文件。



******
系统要求
******
此Javascrīpt 与 Flash 整合工具包要求 6r65 以上版本的Flash播放器,并在以下浏览器中测试通过:
Windows IE 6.0
Windows Firefox 1.0
Windows Opera 8.0
Macintosh Opera 8.0
Macintosh Firefox 1.0
Safari 1.2.4 and 2.0
Linux Firefox 1.1

******
已知问题
******
1.如非被明确的定义为 undefined,Javascrīpt 中的未定义对象属性将不能被连载并发给Flash。如果该变量未经声明,则将被清除。
2.在调试工具环境下,Javascrīpt和Flash的通讯会很缓慢,但是在其他平台和浏览器包括独立播放器下,其速度不会减缓。
3.不能传递循环中的对象或数组。Javascrīpt和Actionscrīpt下的循环引用都可能引起死循环。换句话说,如果对象属性是指向其自身的一个引用,连载的代码将拼命地无限循环下去。

此产品(包含软件)由Macromedia有限公司出品。(http://www.macromedia.com)
作者: TJIAN33    时间: 2010-6-10 09:43
最好把你的内容介绍一下。一般看了不想下,怕有病毒。




欢迎光临 纳速健身 (https://nasue.com/) Powered by Discuz! X3.4