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;"
posted @ 2014-05-12 17:42  绝不原创的飞龙  阅读(14)  评论(0编辑  收藏  举报  来源