The JavaScript and Flash Integration Kit是MM的Mike Chambers和Christian Cantrell开发的一套用于Javascript和Flash通讯的通用接口程序。通过这套接口,两种语言的大部分数据类型能够被相互支持。之前JS与Flash通讯的方法是通过fsCommand(),这一套程序用到了flash中的LocalConnection对象,支持主流的浏览器平台。
安装和使用方法在配套的文档中已经说得比较清楚了,我这里只是提一些要点。安装文件中JavaScriptFlashGateway.swf就是这套接口能够正常运作的幕后功臣,其作用就是发送基于LocalConnection对象的指令来操作目标Flash。
看看使用这套接口的基本代码,在html页头部加入:
<script type="text/javascript" src="/path/to/JavaScriptFlashGateway.js"></script>
生成一个id值,建立提供接口服务的FlashProxy对象:
var uid = new Date().getTime(); var flashProxy = new FlashProxy(uid, '/path/to/JavaScriptFlashGateway.swf');
在页面中用FlashTag对象代替传统的<object>或<embed>来插入Flash文件:
<script type="text/javascript">
var tag = new FlashTag('/path/to/flashContent.swf', 300, 300); // last two arguments are height and width
tag.setFlashvars('lcId='+uid);
tag.write(document);
</script>
uid用来配对LocalConnction对象:分别为FlashProxy提供id参数和作为主Flash文件传入的lcId参数。
在JS中要调用Flash中的方法,使用flashProxy对象的call()方法:
flashProxy.call('myActionScriptFunction', 'my string', 123, true, new Date(), null);
该方法在页面上插入JavaScriptFlashGateway.swf文件,并且传入相应的参数。然后这个文件则通过LocalConnection对象发送指令到连接的Flash文件中。每次调用这个方法,JavaScriptFlashGateway.swf都会重新载入一次(通过改变div的innerHTML)。
主Flash文件还需要建立一个JavaScriptProxy对象来响应JS的调用(其实也就是初始化一个对应的LocalConnection对象):
var proxy:JavaScriptProxy = new JavaScriptProxy(_root.lcId, this);
Flash中调用JS比较简单,其实本质上就是用:
getURL("javascript:javaScriptMethodName()");
当然还是用JavascriptProxy类提供的方法来得比较professional一点:
import com.macromedia.javascript.JavaScriptProxy; var proxy:JavaScriptProxy = new JavaScriptProxy(); proxy.call("javaScriptMethodName", "arg1", new Object()); // or proxy.javaScriptMethodName("arg1", new Object());
至于两种语言的对象相互转换则分别有FlashSerializer类和JavaScriptSerializer类来做序列化的工作。
总而言之,这一套接口还是LocalConnection的应用,和之前的整合了浏览器功能的Flash导航有异曲同工之妙。这一类型的应用基本上都是通过重载一个Flash文件(用页面刷新或用innerHTML内部刷新)来发送指令更新主Flash文件。


