博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 使用 MsieJavaScriptEngine 引擎运行JavaScript
阅读量:5072 次
发布时间:2019-06-12

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

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

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

 

使用 Nuget 安装 MsieJavaScriptEngine

我使用的是 3.0.3.0 版本。

 

添加 using

1 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 对象

1             using (var jsEngine = new MsieJsEngine(new JsEngineSettings() { UseJson2Library = true })) 2             { 3                 jsEngine.SetVariableValue("result", ""); 4                 //设置js变量为json字符串值 5                 jsEngine.SetVariableValue("model", Json.ToJson(new EngineData(_table, _cols))); 6                 //执行JSON.parse()将字符串转为js对象 7                 jsEngine.Execute("model = JSON.parse(model);"); 8  9                 ResultTextBox.Text = jsEngine.Evaluate
(tmpl);10 }

 

附 所有Api

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

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

public object CallFunction(string functionName, params object[] args);        public T CallFunction
(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
(string expression); public T Evaluate
(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
(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);

 

转载于:https://www.cnblogs.com/Aaxuan/p/11237790.html

你可能感兴趣的文章
Validation Rule和Binding Group
查看>>
不管在哪里工作,请记住这些话
查看>>
HDU 5441 Travel
查看>>
上传文件没有写权限Access to the path is denied
查看>>
Docker到底是什么
查看>>
Android常用逆向工具+单机游戏破解
查看>>
《像计算机科学家一样思考Python》-递归
查看>>
codevs2171 棋盘覆盖
查看>>
SQL Server ->> 生成Numbers辅助表
查看>>
HDU1569+最大点权集
查看>>
(网络收集)彻底解决超链接提交中文乱码问题
查看>>
JS-隐士类型转换‘1’+1、‘1’-1、++‘1’为什么不一样?
查看>>
spark(03)
查看>>
基础教程
查看>>
外观模式
查看>>
shell 父子shell 调用
查看>>
登录后记住用户名-JS解决方案
查看>>
Codeforces 785D Anton and School - 2 (组合数相关公式+逆元)
查看>>
初级安全入门——安全漏洞的检测与利用
查看>>
css position:relative 在IE6, 7下有bug
查看>>