用这个东西实现了一个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);

C# 使用 MsieJavaScriptEngine 引擎运行JavaScript的更多相关文章

  1. 使用C#解析并运行JavaScript代码

    如果想在C#编程中解析并运行JavaScript代码,常见的方式有两种: 利用COM组件“Microsoft Script Control”,可参见:C#使用技巧之调用JS脚本方法一 利用JScrip ...

  2. 在线运行Javascript,Jquery,HTML,CSS代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xht ...

  3. 如何选择Javascript模板引擎(javascript template engine)?

    译者 jjfat 日期:2012-9-17  来源: GBin1.com 随着前端开发的密集度越来越高,Ajax和JSON的使用越来越频繁,大家肯定免不了在前台开发中大量的使用标签,常见到的例子如下: ...

  4. [工具] 解决sublime text运行javascript console无输出问题

    1.使用nodeJS在sublime text 运行javascript 下载安装nodeJS 在sublime text新建build system:tools->build system-& ...

  5. 在 .NET Core 中运行 JavaScript

    一.前言 在 .NET Framework 时,我们可以通过V8.NET等组件来运行 JavaScript,不过目前我看了好几个开源组件包括V8.NET都还不支持 .NET Core ,我们如何在 . ...

  6. C#中让WebBrowser运行Javascript脚本

    C#中可以让Webbrowser运行Javascript脚本来实现各种自动化操作,比如点击网页上的按钮,输入用户名密码等等.代码也很简单: >>>>>>>&g ...

  7. WebSphere ILOG JRules 规则引擎运行模式简介

    WebSphere ILOG JRules 规则引擎运行模式简介 引言 作为 JRules 的核心组件,规则引擎决定了在规则集的执行过程中,哪些业务规则会被执行,以及以何种顺序执行.理解并合理选择规则 ...

  8. 浏览器地址栏运行JavaScript代码

    这个很多人应该还是知道的,在浏览器地址栏可以直接运行JavaScript代码,做法是以javascript:开头后跟要执行的语句.比如: javascript:alert('hello from ad ...

  9. Java中运行javascript代码

    Java中运行javascript代码 1.Java 代码 2.JS代码 2.1demoWithParams.js 2.2demoWithListParams.js 原文作者:russle 原文地址: ...

随机推荐

  1. RabbitMQ入门教程(五):扇形交换机发布/订阅(Publish/Subscribe)

    原文:RabbitMQ入门教程(五):扇形交换机发布/订阅(Publish/Subscribe) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. ...

  2. Doker GRPC "Connection reset by peer"

    https://success.docker.com/article/ipvs-connection-timeout-issue https://forums.docker.com/t/setting ...

  3. mycat schema server rule

    schema <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd" ...

  4. docker Dockerfile文件的编写部分命令

    镜像的构建过程:编写dockerfile文件,执行docker build 进行构建镜像,最后docker run 运行容器镜像实例. docker build -t mycentos:1.01 . ...

  5. vue-cli设置引入目录

    打开build/webpack.base.conf.js 找到module.exports下的resolve这行 刚开始是这样的 resolve: { extensions: ['.js', '.vu ...

  6. Delphi 对象观察器

  7. SpringBootMybatis02 mybatis-generator-gui|pageHelper|前后端分离|Filter权限实现

    一.Mybatis-generator-gui 下载地址:https://github.com/LittlePageProgram/mybatis-generator-gui.git 使用方法:填写相 ...

  8. BufferedReader和PrintWriter读写中文的问题

    最近用BufferedReader读一个文本文件,然后再将读出的内容用PrintWriter写入到另外一个新的文件中. 之前一直没有发现这个问题,就是如果文本内容中有中文,在读出的内容和写入的内容都会 ...

  9. python中对RSA的加密和解密

    首先,生成一对密钥,并保存 def create_keys(): # 生成公钥和私钥 (pubkey, privkey) = rsa.newkeys(1024) pub = pubkey.save_p ...

  10. idea+maven3.6.1构建maven工程报PKIX:unable to find valid certification path to requested target

    转载于  https://www.cnblogs.com/xiaoping1993/p/9717649.html 注意可能在idea工具执行java命令提示找不到类,返回类的最上层包路径 然后再执行j ...