C# 使用 MsieJavaScriptEngine 引擎运行JavaScript
用这个东西实现了一个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的更多相关文章
- 使用C#解析并运行JavaScript代码
如果想在C#编程中解析并运行JavaScript代码,常见的方式有两种: 利用COM组件“Microsoft Script Control”,可参见:C#使用技巧之调用JS脚本方法一 利用JScrip ...
- 在线运行Javascript,Jquery,HTML,CSS代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xht ...
- 如何选择Javascript模板引擎(javascript template engine)?
译者 jjfat 日期:2012-9-17 来源: GBin1.com 随着前端开发的密集度越来越高,Ajax和JSON的使用越来越频繁,大家肯定免不了在前台开发中大量的使用标签,常见到的例子如下: ...
- [工具] 解决sublime text运行javascript console无输出问题
1.使用nodeJS在sublime text 运行javascript 下载安装nodeJS 在sublime text新建build system:tools->build system-& ...
- 在 .NET Core 中运行 JavaScript
一.前言 在 .NET Framework 时,我们可以通过V8.NET等组件来运行 JavaScript,不过目前我看了好几个开源组件包括V8.NET都还不支持 .NET Core ,我们如何在 . ...
- C#中让WebBrowser运行Javascript脚本
C#中可以让Webbrowser运行Javascript脚本来实现各种自动化操作,比如点击网页上的按钮,输入用户名密码等等.代码也很简单: >>>>>>>&g ...
- WebSphere ILOG JRules 规则引擎运行模式简介
WebSphere ILOG JRules 规则引擎运行模式简介 引言 作为 JRules 的核心组件,规则引擎决定了在规则集的执行过程中,哪些业务规则会被执行,以及以何种顺序执行.理解并合理选择规则 ...
- 浏览器地址栏运行JavaScript代码
这个很多人应该还是知道的,在浏览器地址栏可以直接运行JavaScript代码,做法是以javascript:开头后跟要执行的语句.比如: javascript:alert('hello from ad ...
- Java中运行javascript代码
Java中运行javascript代码 1.Java 代码 2.JS代码 2.1demoWithParams.js 2.2demoWithListParams.js 原文作者:russle 原文地址: ...
随机推荐
- 使用T4模板为EF框架添加数据库实体注释(转)
1. 下载文件GetSummery.ttinclude2. 把我们下载下来的文件解压,将解压出来的文件放入解决方案中3. 修改下app.config,添加一个连接字符串: <add name=& ...
- iOS 跳转系统设置界面
iOS 跳转系统设置界面 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=Pri ...
- laravel 添加筛选方式
protected function grid() { return Admin::grid(Client::class, function (Grid $grid) { $grid->id(' ...
- (转) oracle清空数据库脚本
在开发过程中,可能经常需要重新初始化数据库,在初始化之前,我们肯定希望不再有以前的老表.存储过程等用户对象,用下面的教本就可以做到这一点: BEGIN FOR rec IN (SELE ...
- Web service基础
Web service是Web应用程序 平台是XML+http XML是不同平台和不同编程语言之间的语言,用于编解码数据. http是因特网协议 XML是web service的基础 Web serv ...
- VxWorks引导启动过程
https://blog.csdn.net/phunxm/article/details/6979089
- Spring mvc项目的web.xml以及注释
web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp ...
- JVM垃圾回收之CMS收集器
从前文JVM垃圾回收几种常见算法和常见收集器我们知道,CMS是老年代垃圾收集器.CMS 收集器主要关注系统停顿时间.CMS 是 Concurrent Mark Sweep 的缩写,意为并发标记清除,从 ...
- rsync+inotify实时数据同步单目录实战
rsync+inotify实时数据同步单目录实战 rsync+inotify实时数据同步单目录实战 inotify是一个强大的.细粒度的.异步的文件系统事件监控机制,linux内核从2.6.13起 ...
- LOJ-6280-数列分块入门4
链接: https://loj.ac/problem/6280 题意: 给出一个长为n 的数列,以及 n个操作,操作涉及区间加法,区间求和. 思路: sum维护区间和, tag维护每个区间多加的,不是 ...