加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 01:12:28 所属栏目:百科 来源:网络整理
导读:做项目的时候,需要实现FTP上传的功能,项目本身是使用SDK3.2,而FTP上传需要用到SDK4.0以上的版本,于是就另外搭建了一个工程来实现这个功能。 如果仅仅是Flex和JavaScript进行交互,可以使用ExternalInterface: 1.Flex调用Js中的方法,直接ExternalInterf

做项目的时候,需要实现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,"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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读