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

推荐这些文章:

C#:如何通过反射得到当前方法所在的方法名?

问题
比方说,我在方法A里面写代码,怎么可以得到方法A的方法名?

最佳回答

//1.
var methodInfo = MethodBase.GetCurrentMethod();
Console.WriteLine(methodInfo.Name);

//2.
var method = new StackTrace().GetFrame(0).GetMethod();
Console.W...

C#关于新特性var隐式类型声明数组的小问题

问题
class MainClass     {         public static void test1()         {             var num1 = 10;             int Sum = num1 + 100;             var num2 = "string";             Console.WriteLine (Sum);             Console.WriteLine (num2);             int[] jiang = {1,2,3};             ...

var_export 生成php可执行的字符创

$arr = array(1,2,3);

$res = var_expot($arr);

echo $res ;
//输出:
// array (
// 0 => 1,
// 1 => 2,
// 2 => 3,
// )

www.php.net的解读:var_export() 函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 函数类似,不同的是其返回的表示是合法的 PHP 代码。
var_export($v,[true]):  $v:必须,需要...

C# LINQ简单使用

using System;
using System.Collections.Generic;
using System.Linq;

namespace 认识LINQ
{
class Program
{
static void Main(string[] args)
{
int[] arry = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

int[] arry2 = new int[] { 100 };
var query1...

C# 多元运算符写法

var status = 4; var state = status == 1 ? "a" : (status == 2 ? "b" : (status == 3 ? "c" : (status == 4 ? "d" : "结束"))); Console.WriteLine(state); Console.ReadKey();

...

C#中的委托、委托链、匿名函数、lamda表达式、事件

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;
namespace ConsoleApp4{ //声明委托 public delegate void SayHellowdlg(string name); class Program { //创建一个SayHellowdlg类型的事件 public static event SayHellowdlg SayHellowE...

c#日期时间总结

一、一般时间(常用的为黄色)
DateTime dt = DateTime.Now; Console.WriteLine(dt.Date); //获取日期 Console.WriteLine(dt.TimeOfDay); //获取时间到毫秒:13:08:44.5278155 Console.WriteLine(dt.DayOfWeek); //星期,Monday等 Console.WriteLine((int)dt.AddDays(4).DayOfWeek); //数字星期1,2,3,4,5,6,0...

js定义一个立即执行函数

(function () { console.log('自执行函数1'); })();
(function () { console.log('自执行函数2'); }());
!function () { console.log('自执行函数3'); }();
+ function () {
console.log('自执行函数4');
}();
- function () {
console.log('自执行函数5');
}();
~function () {
console.log('自执行函数6');
}();
!function () {
consol...

EF中打印执行的SQL语句

在EF执行中,有时候需要知道执行的SQL语句,如何打印出SQL语句。
核心代码:db.Database.Log = Console.WriteLine;

using (dbContext db = new dbContext())
{
db.Database.Log = Console.WriteLine;
var item = db.Table.FirstOrDefault();
Console.ReadKey();
}

 

...

JavaScript 脚本的执行原理

原理
JavaScript 是一种动态、弱类型、基于原型的语言,通过浏览器可以直接执行
当浏览器遇到<script> 标记的时候,浏览器会执行之间的 javascript 代码。嵌入的 JavaScript 代码是顺序执行的,每个脚本定义的全局变量和函数,都可以被后面执行的脚本所调用。 变量的调用,必须是前面已经声明,否则获取的变量值是 undefine

...

文章标题:C# 执行Javascript脚本
文章链接:https://www.dianjilingqu.com/4551.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>