源代碼下載地址:git://github.com/fholm/IronJS.git
GitHub地址:https://github.com/fholm/IronJS
IronJs.DLL 0.2.0.1下載:http://files.cnblogs.com/comsokey/IronJS0.2.0.1.zip
C# 調用JS方法
class Program { static void Main(string[] args) { var v = new IronJS.Hosting.CSharp.Context(); // 創建JS方法 v.Execute("function sayHello(str){ return {msg:'Hello ,' + str};}"); // 通過JS代碼調用JS方法返回值 dynamic dy = v.Execute("sayHello('JS Call');"); Console.WriteLine(dy.msg); // 創建JS方法 v.Execute("function sayHello2(str){ return {msg:'Hello ,' + str.msg};}"); // 映射JS方法到指定的delegate上 dy = v.GetFunctionAs<GetWithMyClass>("sayHello2"); // 調用JS方法 dy = dy(new MyClass() {msg = "C# Call"}); // Console.WriteLine(dy.msg); Console.ReadKey(true); } private delegate dynamic GetWithMyClass(MyClass myClass); } class MyClass { public string msg; }
JS調用C#方法
var v = new IronJS.Hosting.CSharp.Context(); // 創建C#方法代碼 Action<string> action = new Action<string>((str) => Console.WriteLine("C#方法接收到的參數:{0}", str)); // 創建FunctionObject FunctionObject fun = IronJS.Native.Utils.createHostFunction(v.Environment, action); // 綁定方法 v.SetGlobal("WriteLine", fun); //調用 v.Execute("WriteLine('12313');");
傳遞C#實例
var v = new IronJS.Hosting.CSharp.Context(); MyClass myClass = new MyClass(){msg = "C#實例"}; // 將實例映射到JS變量 v.SetGlobal("myClass",myClass); // 創建JS方法 v.Execute("function sayHello(){ return {msg:'Hello ,' + myClass.msg};}"); // 通過JS代碼調用JS方法返回值 dynamic dy = v.Execute("sayHello();"); Console.WriteLine(dy.msg);
獲取JS變量/解析Json
static void Main(string[] args) { var v = new IronJS.Hosting.CSharp.Context(); string strJson = " var json ={參數1:'json參數1',參數2:{參數21:1,參數22:2},參數3:[1,2,3]};" + " var json2 ={參數1:'json2參數1',參數2:{參數21:1,參數22:2},參數3:[1,2,3]};"; // 運行代碼,獲取最后一個變量。(本例中返回Json2) dynamic dy2 = v.Execute(strJson); // 獲取指定JS變量值 dynamic dy1 = v.GetGlobalAs<dynamic>("json"); // 打印數據 Print(dy1); // 打印數據 Print(dy2); Console.ReadKey(true); } private static void Print(dynamic dy1) { Console.WriteLine("參數1:{0}",dy1.參數1); Console.WriteLine("參數21:{0}", dy1.參數2.參數21); Console.WriteLine("參數22:{0}", dy1.參數2.參數22); for (int i = 0; i < dy1.參數3.length; i++) { Console.WriteLine("參數3[{1}]:{0}", dy1.參數3[i],i); } }
注意:
調用JS方法時,傳遞參數為一個類實例,在JS方法中無法修改屬性值。(不知道是不是測試的語句不正確)
但是可以通過將實例轉化成Json對象進行傳遞,但該方法僅能解決簡單類的實現。
PS:
簡單類可以時間,但是在傳入傳出時需要序列化成Json
(未完待續)