微軟自家的.Net下的JavaScript引擎--- ClearScript


微軟開源的 JavaScript引擎——ClearScript(當然,也支持VB Script):https://github.com/microsoft/ClearScript ,昨天做了一個大的改變,就是把C++/CLI代碼移除了,這就意味着脫離Windows,可以在linux上運行了。

image

園子里有一篇 : 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM