Jurassic.ScriptEngine 简易示例
零、准备
1. 到官网(http://jurassic.codeplex.com/releases)下载最新版本的Jurassic.ScriptEngine Dll。
2. 确保项目是4.0框架及以上,引入dll。
3. 添加"using Jurassic;"语句。
一、宿主调用脚本
0. 最开始要创建一个脚本对象
ScriptEngine sc = new ScriptEngine();
1. 下面的例子演示了如何计算表达式:
int i = sc.Evaluate<int>("1 + 1");
Console.WriteLine(i);
结果为:
2
2. 下面的例子演示了如何获取脚本中的全局对象:
对于没有返回值或者舍弃返回值的语句,可以用Execute方法执行
sc.Execute("var i = 1;");
int i = sc.GetGlobalValue<int>("i");
Console.WriteLine(i);
当然也可以这样执行
sc.Execute("var i = 1;");
int i = sc.Evaluate<int>("i");
Console.WriteLine(i);
结果为:
1
3. 下面的例子演示了如何调用脚本中的函数
sc.Execute("function add(a,b){return a+b;}");
int i = sc.Evaluate<int>("add(1,2);");
Console.WriteLine(i);
结果为:
3
4. 调用函数时动态传入参数 add函数同上
int i = sc.CallGlobalFunction<int>("add", 1, 2);
Console.WriteLine(i);
结果为:
3
二、脚本调用宿主
1. 调用宿主的方法
sc.SetGlobalFunction("ConsoleWriteln", new Action<string>(Console.WriteLine));
sc.Execute("ConsoleWriteln('hello');");
结果为:
hello
2. 调用宿主的对象 ConsoleWriteln同上
sc.SetGlobalValue("hello", "hello");
sc.Execute("ConsoleWriteln(hello);");
结果为:
hello
要注意delegate不能转换为js的function对象 所以两个函数不能写错
如果要传入js基本类型之外的对象 请开启"sc.EnableExposedClrTypes = true;"
1. 到官网(http://jurassic.codeplex.com/releases)下载最新版本的Jurassic.ScriptEngine Dll。
2. 确保项目是4.0框架及以上,引入dll。
3. 添加"using Jurassic;"语句。
一、宿主调用脚本
0. 最开始要创建一个脚本对象
ScriptEngine sc = new ScriptEngine();
1. 下面的例子演示了如何计算表达式:
int i = sc.Evaluate<int>("1 + 1");
Console.WriteLine(i);
结果为:
2
2. 下面的例子演示了如何获取脚本中的全局对象:
对于没有返回值或者舍弃返回值的语句,可以用Execute方法执行
sc.Execute("var i = 1;");
int i = sc.GetGlobalValue<int>("i");
Console.WriteLine(i);
当然也可以这样执行
sc.Execute("var i = 1;");
int i = sc.Evaluate<int>("i");
Console.WriteLine(i);
结果为:
1
3. 下面的例子演示了如何调用脚本中的函数
sc.Execute("function add(a,b){return a+b;}");
int i = sc.Evaluate<int>("add(1,2);");
Console.WriteLine(i);
结果为:
3
4. 调用函数时动态传入参数 add函数同上
int i = sc.CallGlobalFunction<int>("add", 1, 2);
Console.WriteLine(i);
结果为:
3
二、脚本调用宿主
1. 调用宿主的方法
sc.SetGlobalFunction("ConsoleWriteln", new Action<string>(Console.WriteLine));
sc.Execute("ConsoleWriteln('hello');");
结果为:
hello
2. 调用宿主的对象 ConsoleWriteln同上
sc.SetGlobalValue("hello", "hello");
sc.Execute("ConsoleWriteln(hello);");
结果为:
hello
要注意delegate不能转换为js的function对象 所以两个函数不能写错
如果要传入js基本类型之外的对象 请开启"sc.EnableExposedClrTypes = true;"