博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jurassic.ScriptEngine 使用
阅读量:5264 次
发布时间:2019-06-14

本文共 3305 字,大约阅读时间需要 11 分钟。

标记: , ,

Jurassic.ScriptEngine是一个让net动态执行js的一个引擎。类似的有ironjs等。支持ECMAScript 5,非线程安全

使用

  • using Jurassic;

//1简单的执行js字符串

js:

function main(a,b)

{

return a+b;

}

c#

var engine = new Jurassic.ScriptEngine(); engine.Evaluate("上面的js代码");// var addResult= engine.CallGlobalFunction(" main", 5, 6);//结果11

//2加载 js库文件然后执行 js函数

123
var engine = new Jurassic.ScriptEngine();    engine.ExecuteFile(@"underscore-min.js");   tb.Text = engine.Evaluate("   _.first([5, 4, 3, 2, 1]);").ToString();

// 先加载js文件 然后执行js库的函数

//3 设置全局变量

engine.SetGlobalValue("interop", 15);

//4获取全局变量

engine.GetGlobalValue
("interop")
 
//5 从js中调用net的方法
engine.SetGlobalFunction("test", new Func
((a, b) => a + b));//设置js全局函数test
engine.Evaluate
("test(5, 6)") //调用js函数test
调用的时候注意js和net的类型对应关系

C# type name            .NET type name                 JavaScript type name

bool                           System.Boolean                  boolean

int                               System.Int32                       number

double                      System.Double                    number

string                         System.String                      string

Jurassic.Null               Jurassic.Null                        null

Jurassic.Undefined   Jurassic.Undefined              undefined

Jurassic.Library.ObjectInstance (or a derived type)   Jurassic.Library.ObjectInstance (or a derived type)         object

//6  net调用js的方法

engine.Evaluate("function test(a, b) { return a + b }");
engine.CallGlobalFunction
("test", 5, 6);
 
//7 暴露net的class给js
using Jurassic;using Jurassic.Library;public class AppInfo : ObjectInstance{    public AppInfo(ScriptEngine engine)        : base(engine)    {        // 重写name属性
this["name"] = "Test Application";        // 只读属性
this.DefineProperty("version", new PropertyDescriptor(5, PropertyAttributes.Sealed), true);    }}
 
engine.SetGlobalValue("appInfo", new AppInfo(engine));Console.WriteLine(engine.Evaluate
("appInfo.name + ' ' + appInfo.version"));

// 8 暴露net的class的静态方法

using Jurassic;using Jurassic.Library;public class Math2 : ObjectInstance{    public Math2(ScriptEngine engine)        : base(engine)    {        this.PopulateFunctions();    }    [JSFunction(Name = "log10")]    public static double Log10(double num)    {        return Math.Log10(num);    }}
 
engine.SetGlobalValue("math2", new Math2(engine));engine.Evaluate
("math2.log10(1000)");

// 9   暴露net的类实例

using Jurassic;using Jurassic.Library;public class RandomConstructor : ClrFunction{    public RandomConstructor(ScriptEngine engine)        : base(engine.Function.InstancePrototype, "Random", new RandomInstance(engine.Object.InstancePrototype))    {    }    [JSConstructorFunction]    public RandomInstance Construct(int seed)    {        return new RandomInstance(this.InstancePrototype, seed);    }}public class RandomInstance : ObjectInstance{    private Random random;    public RandomInstance(ObjectInstance prototype)        : base(prototype)    {        this.PopulateFunctions();        this.random = new Random(0);    }    public RandomInstance(ObjectInstance prototype, int seed)        : base(prototype)    {        this.random = new Random(seed);    }    [JSFunction(Name = "nextDouble")]    public double NextDouble()    {        return this.random.NextDouble();    }}
 
 
engine.SetGlobalValue("Random", new RandomConstructor(engine));engine.Evaluate
("var rand = new Random(1000); rand.nextDouble()");

 

备注: 如果同cs-script配合使用,就可以同时动态执行js和net的cs代码,互相调用。

转载于:https://www.cnblogs.com/wang2650/p/4811918.html

你可能感兴趣的文章
HDU 3572 最大流
查看>>
Bootstrap基础
查看>>
Javascript: 从prototype漫谈到继承(1)
查看>>
POJ 3974 Palindrome | 马拉车模板
查看>>
oracle表关联update和表建立索引
查看>>
JVM运行内存分类
查看>>
【学习】博弈相关:Nim
查看>>
BZOJ4552 HEOI/TJOI2016 排序 线段树、二分答案
查看>>
13. 用Roberts、Sobel、Prewitt和Laplace算子对一幅灰度图像进行边缘检测。观察异同。...
查看>>
winform采用POST上传指定文件,并获取返回值
查看>>
一、Qt Creator的安装和hello world程序的编写
查看>>
C/C++ 关于大小端模式
查看>>
VueJs2.0建议学习路线
查看>>
An Algorithm
查看>>
导出Excel的几种方法
查看>>
赋值表达式也有值
查看>>
2013年下半年软件评測师(下午)试题分析与解答
查看>>
第一个项目--用bootstrap实现美工设计的首页
查看>>
线程概述
查看>>
struts的增删改查
查看>>