zoukankan      html  css  js  c++  java
  • C# 执行Javascript脚本

    前一阵子使用C#编写SCXML状态机,需要解析EMCScript表达式,使用了Jint库(https://github.com/sebastienros/jint/),当时感觉与C#之间的数据转换不是很方便。这两天有时间又关注了一下,发现新的3.0版本有了很大改进,在这里介绍给大家,供参考。

    首先要安装nuget包,注意增加prerelease选项,安装最新的版本,使用dotnet命令行指令如下:

    dotnet add  package Jint --prerelease
    

    直接计算表达式:

    Console.WriteLine("直接计算表达式:(1+2)*3");
    var r1= e.Evaluate("(1+2)*3");
    Console.WriteLine(r1);
    
    

    字符串操作:

    Console.WriteLine("字符串操作:'abc'.length");
    var r2=e.Evaluate("'abc'.length");
    Console.WriteLine(r2);
    
    Console.WriteLine("-----------------------");
    Console.WriteLine("字符串操作:'abc'.substr(2)");
    var r3=e.Evaluate("'abc'.substr(2)");
    Console.WriteLine(r3);
    

    可以使用SetValue给JS变量赋值:

    var e2 = new Engine()
        .SetValue("x", 1)
        .SetValue("y",2);
    var r4=e2.Evaluate("x+y");
    Console.WriteLine(r4);
    
    

    可以使用对象进行C#和JS之间的数据交换:

    var myobj= new Student {
        Name="张三"
    };
    Console.WriteLine(myobj.Name);
    var e4 = new Engine()
        .SetValue("student", myobj)
        .Execute("student.Name = '李四'");
    Console.WriteLine(myobj.Name);
    

    可以将C#函数委托给JS引擎,在JS代码中调用这些函数:

    Console.Write("将CSharp函数设置给Js引擎");
    var engine = new Engine()
        .SetValue("log", new Action<object>(Console.WriteLine));
     engine.Execute(@"
        function hello() { 
            log('Hello World');
        };
     
        hello();
    ");
    
    

    也可以从CSharp 调用JS的函数:

    Console.WriteLine("调用JS函数计算BMI");
    var e5=new Engine()
        .Execute("function bmi(weight, height) { return weight/height/height; }");
    Console.WriteLine(e5.Invoke("bmi",75,1.75));
    
    

    可以引入CLI,从而在JS引擎中调用CLI中的函数:

    Console.WriteLine("调用.Net函数写入文件");
    var e6 = new Engine(cfg => cfg.AllowClr());
    e6.Execute(@"var f=System.IO.StreamWriter('sayhello.log');
            f.WriteLine('你好 !');
            f.Dispose();");
    

    示例可以从github下载:https://github.com/zhenl/CSharpScriptDemo,本文示例在JSInCSharp项目中。

    本文来自博客园,作者:寻找无名的特质,转载请注明原文链接:https://www.cnblogs.com/zhenl/p/15756305.html

  • 相关阅读:
    spring冲刺第九天
    梦断代码读后感1
    spring冲刺第八天
    站立会议第三天
    站立会议第二天
    站立会议第一天
    购书问题
    团队项目NABCD分析
    你的灯亮着吗读书笔记3
    你的灯亮着吗读书笔记2
  • 原文地址:https://www.cnblogs.com/zhenl/p/15756305.html
Copyright © 2011-2022 走看看