微软自家的.Net下的JavaScript引擎——ClearScript
Posted 自由、创新、研究、探索
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微软自家的.Net下的JavaScript引擎——ClearScript相关的知识,希望对你有一定的参考价值。
微软开源的 javascript引擎——ClearScript(当然,也支持VB Script):https://github.com/microsoft/ClearScript ,昨天做了一个大的改变,就是把C++/CLI代码移除了,这就意味着脱离Windows,可以在linux上运行了。
园子里有一篇 : C# / .NET Core 调用javascript方法(适用于Windows/Linux平台) 有很好的示例代码:
Microsoft.ClearScript
引入Nuget包,Microsoft.ClearScript
demo.js(原生javascript)
function m(t, e, r) { p(v(t)) }
引入Nuget包,Microsoft.ClearScript
using Microsoft.ClearScript.JavaScript; using Microsoft.ClearScript.V8;
初始化
using (var engine = new V8ScriptEngine()) { engine.DocumentSettings.AccessFlags = Microsoft.ClearScript.DocumentAccessFlags.EnableFileLoading; engine.DefaultAccess = Microsoft.ClearScript.ScriptAccess.Full; // 这两行是为了允许加载js文件 // do something }
调用脚本有多种方案。
方案一:调用engine.ComplieDocument方法直接加载js文件,然后调用engine.Execute将引入的脚本执行一遍,这样后面就可以调用js方法,m就是js的方法名,调用格式与js相同。
V8Script script = engine.CompileDocument(ScriptFilePath); // 载入并编译js文件, 然后Execute, 就可以直接调用。 engine.Execute(script); var result = engine.Script.m("SHAURCOnewayduew&^%5d54nc\'KH");
方案二:将要导入的js方法的代码读出来,然后执行一遍,再调用要执行的js方法
string scriptContent = string.Empty; using(FileStream fs = new FileStream(ScriptFilePath, FileMode.Open, FileAccess.Read)) { using(StreamReader sr = new StreamReader(fs)) { scriptContent = sr.ReadToEnd().Replace("\\r\\n", ""); } } engine.Execute(scriptContent); // 取得脚本里的所有内容,Execute一下,然后,调用engine.Script.func(x,y)执行一下。 var result = engine.Script.m("SHAURCOnewayduew&^%5d54nc\'KH");
直接调用执行调用的方法的js代码也是可以的
string scriptContent = string.Empty; using(FileStream fs = new FileStream(ScriptFilePath, FileMode.Open, FileAccess.Read)) { using(StreamReader sr = new StreamReader(fs)) { scriptContent = sr.ReadToEnd().Replace("\\r\\n", ""); } } scriptContent += "m(\\"SHAURCOnewayduew&^%5d54nc\'KH\\");"; // 在js代码的结尾加上执行的代码 engine.Execute(scriptContent); // 取得脚本里的所有内容,Execute一下,然后,调用engine.Script.func(x,y)执行一下。 var result = engine.Script.m("SHAURCOnewayduew&^%5d54nc\'KH");
特殊情况,调用js全局方法,就是调用js的默认的那些方法
var result = engine.Invoke("encodeURIComponent", "SHAURCOnewayduew&^%5d54nc\'KH"); //只能调用全局方法,如encodeURIComponen
以上是关于微软自家的.Net下的JavaScript引擎——ClearScript的主要内容,如果未能解决你的问题,请参考以下文章