FLEX與C#互動概要
2010年07月21日
準備工作
Flex方面:
1、打開index.template.html,并在js腳本裡填入方法: function invoke(name) { if(arguments.length == 1) return eval("window.external." + name + "()"); var tmp = new Array(); for(var i=1;iFlex Builder生成的HTML檔案.html"); // 前提是FLEX生成的HTML等檔案都放在C#的生成檔案夾DEBUG中
3、在類上做中繼資料标簽[ComVisible(true)]
====================================
開始調用:
FLEX->C#
flex:
ExternalInterface.call("invoke","C#方法名",參數1,參數2…………); // 不傳回值
var str : String = ExternalInterface.call("invoke","C#方法名",參數1,參數2…………); // 傳回值
C#
寫一public方法
public void C#方法名(string args) {} // 不傳回值
public string C#方法名(string args) {} // 傳回值
public string C#方法名( ) {} // 無參數
注意:由于invoke方法的定義,故C#方法隻有一個參數或不帶參,FLEX傳遞過來的變量自動會變成以"|"形式隔開的字元串。
可以用Split方法分開操作
C# -> FLEX
flex:
在一開始,如程式的initialize事件init()中做
private function init() : void {
ExternalInterface.addCallback("onTest",test); // onTest對C#公開的方法,test對FLEX執行的方法
}
private function test() : void {
// 執行的内容,無傳回值
}
或
private function test() : void {
// 執行的内容,有傳回值
}
C#:
var objs = new object[] {"onTest",2,3}; // 第一個為對應FLEX的方法名,後面為參數
wb.Document.InvokeScript("call", objs); // 調用FLEX方法,注意由于call方法的設計,到FLEX後的參數同樣自動變為以"|"隔開
同樣可以有傳回值接收到
var str = wb.Document.InvokeScript("call", objs);