C#調用腳本語言(二)-- IronJS基本語法


源代碼下載地址: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

(未完待續)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM