返回顶部

[文摘] 使用JavaScriptProxy实行JavaScript 与 Flash 间通信

  [复制链接]
awagink 显示全部楼层 发表于 2007-12-23 10:53:34 |阅读模式 打印 上一主题 下一主题
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)

精彩评论1

TJIAN33 显示全部楼层 发表于 2010-6-10 09:43:29
最好把你的内容介绍一下。一般看了不想下,怕有病毒。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

纳速健身网成立于2006年8月,是国内优秀健身运动网站,现拥浏览人数超30万。网站是集养生、武术、太极拳和健身气功等多种健身项目于一体的多功能交流平台。平台提供大量优质的教学视频、伴奏音乐(太极拳晨练音乐,广场舞音乐,健身气功音乐)、图文教程、运动科普和经验分享,为健身爱好者提供完善的运动指导平台。
  • 纳速QQ群乙:151815303
  • 纳速QQ群丙:79104490
  • 微信交流群:微信好友搜索【nasuwang】加小纳微信进群交流健身知识,备注【纳速】
  •                     或者扫描页面底部右侧二维码添加小纳微信>>>
  • 微信公众号

  • 微信群客服交流

  • Copyright © 2006-2021, 纳速健身网. | | 辽ICP备13002388号-1 辽公安网备21050202000005号公安网备号 纳速武术-乙 QQ