微软开源的 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(" ", ""); } } 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(" ", ""); } } 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