转:JavaScript 与 Flash 整合工具包入门介绍(译)

      Flash 2005-7-7 21:54
javascript 与 Flash 整合工具包

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

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

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

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

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

****
使用
****

-从 javascript 调用 ActionScript 函数-

要从 javascript 调用 ActionScript 函数,请确定网页文件中已链接文件 javascriptFlashGateway.js ,代码如下:

<script type="text/javascript" src="/path/to/javascriptFlashGateway.js"></script>

文件 javascriptFlashGateway.js 中包含了一个名为 FlashProxy(Flash代理) 的类,负责代理Flash和javascript之间的函数互调。FlashProxy 和在其中调用函数的Flash影片必须使用同一个 唯一标识(ID),以便让FlashProxy知道调用的函数位于网页上的哪个Flash影片上。创建唯一ID的最简单方法是使用时间戳。要创建唯一ID,可以网页面中插入这样的脚本标签:

var uid = new Date().getTime();

然后,创建一个FlashProxy的javascript类的实体,并传入刚刚创建的唯一ID以及文件 javascriptFlashGateway.swf 的路径,比如像这样:

var flashProxy = new FlashProxy(uid, '/path/to/javascriptFlashGateway.swf');

将Flash内容加入到网页中去的时候,也要用Flash变量将相同的唯一ID传入,
文件 javascriptFlashGateway.js 中含有一个生成Flash标签及加入所需变量的简单方法,像这样:

<script type="text/javascript">
var tag = new FlashTag('/path/to/flashContent.swf', 300, 300); // 最后两个参数是高和宽
tag.setFlashvars('lcId='+uid);
tag.write(document);
</script>

唯一ID通过Flash变量 lcId 被传入到Flash影片中去。现在你已经可以使用FlashProxy的实例从javascript调用ActionScript的函数了,像这样:

flashProxy.call('myActionScriptFunction', 'my string', 123, true, new Date(), null);

以上代码中,第一个参数是你要调用的ActionScript函数名,而其余作为调用函数的参数传入的参数必须是Flash支持的数据类型objects, arrays, strings, dates, numbers, booleans, nulls, 和 undefined 之一。

-在javascript中响应Flash的函数调用-
无需对javascript代码作特殊处理即可在Flash里响应函数调用。

只要页面中包含了文件 javascriptFlashGateway.js ,使用如下所述的技术,Flash就能够以任意数目的参数调用javascript函数。

-从ActionScript调用javascript的函数-
请再次确认含有要调用javascript函数的HTML页中已链接了文件 javascriptFlashGateway.js。
将javascriptProxy 类导入Flash项目:
import com.macromedia.javascript.javascriptProxy;
然后创建javascriptProxy 类的实例如下:
var proxy:javascriptProxy = new javascriptProxy();
调用javascript函数有两种方法:
1.使用调用程序接口(API),如下:
proxy.call("javascriptMethodName", "arg1", new Object());
第一个参数是欲调用的javascript函数名。其余参数将作为被调用函数的参数被传入。
2.也可以使用javascriptProxy类的方法来直接调用,而这些方法将被作为javascript(由javascriptProxy)代为处理。比如:
proxy.javascriptMethodName("arg1", new Object());

-在Flash里响应javascript的函数调用-
要用javascript调用Flash影片的函数,需要创建一个 javascriptProxy 类的实例以及定义函数被代为处理成的对象:
var proxy:javascriptProxy = new javascriptProxy(_root.lcId, this);

构造器带有两个参数。第一个参数是从HTML页中传进Flash影片中去的唯一标识。第二个是被调用函数将被代为处理成的对象或者类的实例。注意:此参数仅在Flash影片需要响应javascript的函数调用时才是必须的。
这就是所需的全部代码。所有javascript调用都将被引向构造器中参数所定义的对象。

******
系统要求
******
此javascript 与 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,javascript 中的未定义对象属性将不能被连载并发给Flash。如果该变量未经声明,则将被清除。
2.在调试工具环境下,javascript和Flash的通讯会很缓慢,但是在其他平台和浏览器包括独立播放器下,其速度不会减缓。
3.不能传递循环中的对象或数组。javascript和ActionScript下的循环引用都可能引起死循环。换句话说,如果对象属性是指向其自身的一个引用,连载的代码将拼命地无限循环下去。

此产品(包含软件)由Macromedia有限公司出品。(http://www.macromedia.com)

国外一个开源范例:http://www.osflash.org/doku.php?id=flashjs:docs:usage:simreturn

转自:经典论坛
标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}