Flex 与 Js 的交互,两个Flex工程之间的交互
做项目的时候,需要实现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); } 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"); } private var conn:LocalConnection; conn = new LocalConnection(); conn.send("myConnection","sayHelloInA",message.text); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |