您的位置:首页 > Web前端 > JavaScript

Flex 与 Js 的交互,两个Flex工程之间的交互

2011-10-08 18:38 369 查看
做项目的时候,需要实现FTP上传的功能,项目本身是使用SDK3.2,而FTP上传需要用到SDK4.0以上的版本,于是就另外搭建了一个工程来实现这个功能。

如果仅仅是Flex和JavaScript进行交互,可以使用ExternalInterface:

1.Flex调用Js中的方法,直接ExternalInterface.call("methodName");

2.Js调用Flex中的方法,首先在Flex中注册这些方法 ExternalInterface.callBack("callForJS", methodInFlex),然后在Js中获得flash对象,再调用 flash.callForJS();

如果是两个Flex工程交互,还可以使用LocalConnection,在projectA中调用设置conn.client = this,再调用connect("connctionName")方法,在projectB中调用send("connectionName", "methodNameInProjectA", ...params)方法,非常简单。connectionName相当于是一个通道或者是一条路,A和B说好我们都往这儿走,都用这个通道,最后就相遇了。在B中也定义一个connect("connectionName")就可以进行双向通信了。

下面是项目中的一些实例:

1.Flex中的页面调用Js中的方法,打开一个新的IE窗口

var filePath:String = "TeachingProgress";
//openWindows是js方法,用来打开一个指定大小的窗口
ExternalInterface.call("openWindow", "/edu/web/ftp/fileExplorer.jsp?status=upload&filePath=" + filePath, "上传文件", 180, 500);


function openWindow(url, name, iHeight, iWidth) {
var iTop = (window.screen.availHeight-30-iHeight)/2;       //获得窗口的垂直位置;
var iLeft = (window.screen.availWidth-10-iWidth)/2;           //获得窗口的水平位置;
win = window.open(url, name, "height="+iHeight+", width="+iWidth+",top="+iTop+",left="+iLeft+", z-look=yes,toolbar=no, menubar=no, scrollbars=yes, resizable=no ,alwaysRaised=yes, location=no, status=no");
win.document.title = name;
}


2.完成相应操作后,Js调用Flex中的方法,返回操作结果:

//FTP 监听弹出的上传IE窗口回调事件
ExternalInterface.addCallback("uploadSuccess", uploadSuccess);
ExternalInterface.addCallback("deleteFile", deleteFile);


js中的代码:

function uploadSuccess(files) {
//get access to the flash player in the page with an ID of YM_FTP
var flash = (navigator.appName.indexOf ("Microsoft") !=-1)?window["YM_EDU"]:document["YM_EDU"];
//call the function in flash
flash.uploadSuccess(files);
}


3.两个Flex工程之间的通信
A工程先连接myConnection,不同的模块可以创建不同连接,这样B工程中就可以根据connectionName调用不同模块中的方法

private var conn:LocalConnection;

conn = new LocalConnection();
conn.client = this;
try {
conn.connect("myConnection");
} catch (error:ArgumentError) {
trace("Can't connect...the connection name is already being used by another SWF");
}


B工程直接连接myConnection,并调用A中的方法

private var conn:LocalConnection;

conn = new LocalConnection();
conn.send("myConnection", "sayHelloInA", message.text);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: