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 原文地址: ...
随机推荐
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 H. Skiing
题意:在这个寒假中,鲍勃有计划在山区度假胜地滑雪.这个滑雪胜地有M个不同的滑雪道和N个不同的标志位于那些转弯处点.从第S标记到第T标志的第i路径具有长度L.每个路径必须遵循降低高度的原则,起点必须严格 ...
- concat()用法
SELECT school_code,`name`,phone from student WHERE login_name REGEXP 'ning$'LIMIT 10; concat() SE ...
- ubuntu安装selenium谷歌插件
爬虫之selenium 安装与 chromedriver安装 今天学到一个有意思的插件,就是chromedriver,在爬虫的时候,如果网站反爬虫做的很好,自己又很想爬去里面的数据,那就可以用这个插件 ...
- check cve
今天想检查一下 Gitlab 11.9.0 产品受哪些 cve 的影响.其实网上已经有很多网站可以查询产品的相关 cve,但就是粒度比较粗.我想在 cve 列表中筛选出特定的版本,已经特定的版本,比如 ...
- laravel的model
1.创建模型 $ php artisan make:model Models/Issue 2.模型的白名单机制,用于赋值 class Issue extends Model { //指定表名 pr ...
- 新手的Linux zcat命令示例
Zcat是一个命令行实用程序,用于查看压缩文件的内容.它将压缩文件扩展为标准输出,允许您查看内容. 分类:Linux命令操作系统 2018-08-13 00:00:00 通常,使用gzip压缩的文件可 ...
- C++ 一周刷完C++基础课程(同C程序进行比较)
**参考bilibili视频av29504365** ### 一段简单的程序Hello World```#include <iostream>using namespace std;int ...
- Permute Digits
You are given two positive integer numbers a and b. Permute (change order) of the digits of a to con ...
- 给oracle命令的参数赋值
''' <summary> ''' 给oracle命令的参数赋值 ''' </summary> ''' <param name="cmd& ...
- python变量与常量内容:
''' python变量与常量内容: ''' # 变量:定义世间万物变化的状态 ''' height 180 weight 140 age 18 tree_name yuyang ''' # prin ...