用这个东西实现了一个js脚本引擎代码生成器,调研的时候这个东西的资料比较少。

我就根据自己的这点应用来讲解讲解,有错误,不符的地方还请园友指出。

使用 Nuget 安装 MsieJavaScriptEngine

我使用的是 3.0.3.0 版本。

添加 using

 using MsieJavaScriptEngine;

核心代码

使用 using 来保证引擎的自动释放,传入配置 UseJson2Library = true 即使用 json2.js 的那些方法。

关于这个 json2 , chrome 等现代浏览器中存在JSON全局变量。这个变量有两个方法 Stringify(将 Js 对象转化成 json 字符串)和 Parse(将 json字符串转化成 Js 对象)。

这两个方法在 Js 对象和 Json 字符串转化过程中很有用。但是IE等老旧浏览器中没有这个全局变量。json2.js 的作用就是:判断是否有全局变量JSON,如果没有就创建它。

这个引擎使用的正是本电脑最高版本的IE内核去解析 Js...

本身我以为 SetVariableValue 方法可以直接设置对象参数,毕竟 Js 对象还是很好转的。但是没想到不支持,会报错。

所以就曲线救国实现将 json 字符串再反序列化到 Js 对象

             using (var jsEngine = new MsieJsEngine(new JsEngineSettings() { UseJson2Library = true }))
{
jsEngine.SetVariableValue("result", "");
//设置js变量为json字符串值
jsEngine.SetVariableValue("model", Json.ToJson(new EngineData(_table, _cols)));
//执行JSON.parse()将字符串转为js对象
jsEngine.Execute("model = JSON.parse(model);"); ResultTextBox.Text = jsEngine.Evaluate<string>(tmpl);
}

附 所有Api

名字和参数名差不多都很直观 就不加注释的翻译了 最近比较忙

看方法名好像 EmbedHostObject 这个方法也可以设置对象参数 ,然后我尝试了一下,并不行。陷入沉思。。。

        public object CallFunction(string functionName, params object[] args);

        public T CallFunction<T>(string functionName, params object[] args);

        public void CollectGarbage();

        public void Dispose();

        public void EmbedHostObject(string itemName, object value);

        public void EmbedHostType(string itemName, Type type);

        public object Evaluate(string expression);

        public object Evaluate(string expression, string documentName);

        public T Evaluate<T>(string expression);

        public T Evaluate<T>(string expression, string documentName);

        public void Execute(string code);

        public void Execute(PrecompiledScript precompiledScript);

        public void Execute(string code, string documentName);

        public void ExecuteResource(string resourceName, Type type);

        public void ExecuteResource(string resourceName, Assembly assembly);

        public object GetVariableValue(string variableName);

        public T GetVariableValue<T>(string variableName);

        public bool HasVariable(string variableName);

        public void Interrupt();

        public PrecompiledScript Precompile(string code);

        public PrecompiledScript Precompile(string code, string documentName);

        public PrecompiledScript PrecompileFile(string path, Encoding encoding = null);

        public PrecompiledScript PrecompileResource(string resourceName, Assembly assembly);

        public PrecompiledScript PrecompileResource(string resourceName, Type type);

        public void RemoveVariable(string variableName);

        public void SetVariableValue(string variableName, object value);

最新文章

  1. 制作自己的MVC框架(二)——启动
  2. django _meta方法
  3. 【PHP资源】PHP 资源大全
  4. endnote参考文献格式设置
  5. 原始套接字(SOCK_RAW)
  6. PLSQL_闪回操作4_Flashback Drop
  7. 济南学习 Day 3 T1 am
  8. Game Tutorials
  9. FZU 2129 子序列个数
  10. JavaScript检测实例属性, 原型属性
  11. post 封装Map 发送请求
  12. Android进程机制
  13. LeetCode_3 sum
  14. easyhadoop初识以及各种问题
  15. 一个利用Dataflow实现的Actor
  16. 使用jQuery.form库中ajaxSubmit提交表单时遇到的一些问题
  17. window.onload和jquery等待加载的区别
  18. js同步、异步、回调的执行顺序以及闭包的理解
  19. XSSExcelUtil
  20. IOS绘图详解

热门文章

  1. 主成分分析法详解(PCA)
  2. ubuntu安装selenium谷歌插件
  3. 定义一个外部类Father,有成员变量name并赋一个初值。
  4. JS递归及二叉搜索树的移除节点
  5. echarts 给legend图例加个标题式文字设置为普通文本不可点击
  6. php强大的filter过滤用户输入
  7. java.lang.ClassNotFoundException: org.apache.jsp.login_jsp
  8. asp.net webApi webconfig配置常见问题
  9. java中将jsonObject字符串转化为Map对象
  10. 转(HBuilder 打包流程)