微軟開源的 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