Flex与Javascript交互
關鍵字:ExternalInterface
所用類庫:SWFObject
?
/**
?* Flex調用Javascript函數
?* @params? functionName:String?? Javascript函數名稱
?* @params ...params??? Javascript函數參數
?* @return? 返回Javascript函數的return內容
?**/
ExternalInterface.call(functionName:String, ...params);
?
main.mxml
view plaincopy to clipboardprint?<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <!--[CDATA[ import flash.external.ExternalInterface; import mx.utils.ObjectUtil; /** * 調用Java script 函數 * @params evt:MouseEvent * @return void **/ private function myClick(evt:MouseEvent):void { var item:Object = new Object(); item.name = "Dante"; item.address = "Beijing"; var results:Object = ExternalInterface.call("myfunc",item); //results為myfunc函數返回的對象 trace(ObjectUtil.toString(results)); } ]]--> </mx:Script> <mx:Button label="Click me" click="myClick(event);"/> </mx:Application>
index.html
view plaincopy to clipboardprint?/** * 被Flex調用的 myfunc函數 * @params item 對象 * @return results 返回一個對象給Flex **/ function myfunc(item) { alert(item.name+"--"+item.address); //創建對象 var results = {}; results .name= "dante"; results .age = 23; results .sex = "man"; return obj; }
/**
?* Javascript調用Flex函數
?* @params?? functionName:String??? Javascript調用Flex函數名
?* @params?? closure:Function???? Flex將要調用的函數
?* @return void
?**/
ExternalInterface.addCallback(functionName:String,closure:Function);
?
main.mxml
view plaincopy to clipboardprint?<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="initApp()"> <mx:Script> <!--[CDATA[ import flash.external.ExternalInterface; import mx.utils.ObjectUtil; /** * initApp * @return void **/ private function initApp():void { //注冊列表 ExternalInterface.addCallback("saveD",saveData); //HTML 與 FLEX交互 //params.flashvars = "xmlPath=hello&name=dante"; var item:Object = Application.application.parameters; trace("xmlPath:"+item.xmlPath ,"name:" + item.name); } /** * saveData * @params item:Object java script 傳過來的參數 * @return void **/ private function saveData(item:Object):void { trace("javascript調用Flex函數成功!"); nameTxt.text = item.name; } ]]--> </mx:Script> <mx:TextInput id="nameTxt"/> </mx:Application>
index.html
HTML內嵌swf文件,我用的SWFObject,個人認為是一個很好的類庫,簡化了包含代碼。
注意 :javascript調用Flex的函數,必須要獲得swf的ID,可以通過document.getElementById(),也可以使用swfobject.getObjectById()。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh" dir="ltr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <mce:script src="js/swfobject.js" mce_src="js/swfobject.js" type="text/javascript"></mce:script> <title>SWFObject</title> <mce:script type="text/javascript" language="javascript"><!-- var flashvars = {}; flashvars.xmlPath = "hello"; flashvars.name = "dante"; var params = false; var attributes = {}; //ID,也就是swf的ID,這個ID很重要,通過它調用flex的方法 attributes.id = "swf01"; //內嵌swf文件,這個embedSWF方法,我在最后的補充會說下 swfobject.embedSWF("swf/main.swf","myPanel","300","200","9.0.0","swf/expressInstall.swf",flashvars,params,attributes); /** * 調用Flex函數 * @return void **/ function callFlex(item) { //通過ID獲得swf,也可以使用document.getElementById(); //var swf = document.getElementById("swf01"); var swf = swfobject.getObjectById("swf01"); var item = {}; item.name = document.getElementById("nameTxt").value; //調用Flex函數,傳參item:Object swf.saveD(item); } // --></mce:script> </head> <body> <center> <div id="myPanel">Flex content</div> <table> <tr> <td>Name</td> <td><input type="text" id="nameTxt"/></td> </tr> <tr> <td colspan="2"> <a href="javascript:callFlex();" mce_href="javascript:callFlex();">Call Flex</a> </td> </tr> </table> </center> </body> </html>
?
OK,兩種交互的方式已經告訴大家了,快試試吧。
?
SWFObject使用補充:
?????? swfobject.embedSWF()
?????? swfobject.getObjectById("swfID")
?????? swfobject.removeSWF("swfID")
?
一.swfobject.embedSWF:
內嵌swf文件,這個函數的參數比較多swfobject.embedSWF(swfUrl, id, width, height, version,expressInstallSwfurl, flashvars,params, attributes),各個參數具體功能如下:
注意 :在不破壞參數順序的情況下,你可以忽略可選參數。如果你不想使用一個可選參數,但是會使用后面的一個可選參數,你可以簡單的傳入false作為參數的值。對flashvars、params和 attributes這些JavaScript對象來說,你也可以相應的傳入一個空對象{}。
二.swfobject.getObjectById("swfId")
通過swfid獲得swf對象,通過該對象可調用flex函數。
三.swfobject.removeSWF("swfId")
通過swfId刪除swf。
注意 :刪除swf這里需要提醒下,因為embedSWF是替換標簽,而不是填充。比如上面的例子<div id="myPanel">Flex content</div>,如果執行了swfobject.removeSWF后,想重新添加SWF必須要重新創建<div id="myPanel">或者更改embedSWF的第二個參數更改替換新的標簽ID。因為在這里SWF替換了調了<div>
轉載于:https://www.cnblogs.com/liuzhong/archive/2011/07/20/2111960.html
總結
以上是生活随笔為你收集整理的Flex与Javascript交互的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记一次Hbase数据迁移和遇到的问题
- 下一篇: MessagePack Java Jac