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

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:C# Winform 自定义异常处理方法
下一篇:Roslyn+T4+EnvDTE项目完全自动化(3) ——生成c++代码
评论列表

发表评论

评论内容
昵称:
关联文章

C# 执行Javascript脚本
C# 中使用JavaScript给PDF文档设置过期时间
javascript js等待几秒执行,休眠几秒中
微信支付:API v3 Postman脚本使用指南
化繁为简,用几个例子介绍JavaScript异步处理async awite
javascript js 操作cookie
npm运行多个server npm-run-all通知执行多个任务
YESWEB数据库更改APPID脚本
Javascript JS日期格式化显示
Python暂停程序执行
C# web页面唤醒本地winform应用并执行指定命令
javascript删除html字符串中的空行
JS清除Input File 的选择文件 javascript清除Input File选择文件
bat批处理中执行gulp界面一闪而过,执行完后cmd窗口就会关闭的解决办法
javascript中let和var的区别
YESWEB开发框架API无法生成迁移脚本
CEFSharp致性JS脚本并获取返回数据
DTCMS:后台执行JS弹窗
SQL表数据多的时候创建索引失败,提示:- 无法创建索引“idx_**”。执行超时已过期。完成操作之前已超时或服务器未响应。
.net Core编译出现错误:指定的任务可执行文件“sgen.exe”未能运行,文件名或扩展名太长

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码