老人与海神 發表於 2020-10-18 20:39:00

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

<p>微软开源的 JavaScript引擎——ClearScript(当然,也支持VB Script):https://github.com/microsoft/ClearScript ,昨天做了一个大的改变,就是把C++/CLI代码移除了,这就意味着脱离Windows,可以在linux上运行了。</p>
<p><img src="https://img2020.cnblogs.com/blog/510/202010/510-20201018203846152-1818588852.png" alt="image" width="605" height="402" title="image" border="0" style="display: inline; background-image: none"></p>
<p>园子里有一篇 : C# / .NET Core 调用javascript方法(适用于Windows/Linux平台) 有很好的示例代码:</p>
<h5><strong><em>Microsoft.ClearScript</em></strong></h5>
<p>引入Nuget包,Microsoft.ClearScript</p>
<p>demo.js(原生javascript)</p>
<pre>function m(t, e, r) {
    p(v(t))
}</pre>
<p>引入Nuget包,Microsoft.ClearScript</p>
<pre>using Microsoft.ClearScript.JavaScript;
using Microsoft.ClearScript.V8;</pre>
<p>初始化</p>
<pre>using (var engine = new V8ScriptEngine())
{
    engine.DocumentSettings.AccessFlags = Microsoft.ClearScript.DocumentAccessFlags.EnableFileLoading;
    engine.DefaultAccess = Microsoft.ClearScript.ScriptAccess.Full; // 这两行是为了允许加载js文件
    // do something
}</pre>
<p>调用脚本有多种方案。</p>
<p>方案一:调用engine.ComplieDocument方法直接加载js文件,然后调用engine.Execute将引入的脚本执行一遍,这样后面就可以调用js方法,m就是js的方法名,调用格式与js相同。</p>
<pre>V8Script script = engine.CompileDocument(ScriptFilePath);   // 载入并编译js文件, 然后Execute, 就可以直接调用。
engine.Execute(script);
var result = engine.Script.m("SHAURCOnewayduew&amp;^%5d54nc'KH");  </pre>
<p>方案二:将要导入的js方法的代码读出来,然后执行一遍,再调用要执行的js方法</p>
<pre>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&amp;^%5d54nc'KH");</pre>
<p>&nbsp;</p>
<p>直接调用执行调用的方法的js代码也是可以的</p>
<pre>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&amp;^%5d54nc'KH\");";// 在js代码的结尾加上执行的代码

engine.Execute(scriptContent);// 取得脚本里的所有内容,Execute一下,然后,调用engine.Script.func(x,y)执行一下。

var result = engine.Script.m("SHAURCOnewayduew&amp;^%5d54nc'KH");</pre>
<p>特殊情况,调用js全局方法,就是调用js的默认的那些方法</p>
<pre>var result = engine.Invoke("encodeURIComponent", "SHAURCOnewayduew&amp;^%5d54nc'KH"); //只能调用全局方法,如encodeURIComponen</pre>

</div>
<div id="MySignature" role="contentinfo">
    <p>欢迎大家扫描下面二维码成为我的客户,扶你上云</p>
<img src="https://images.cnblogs.com/cnblogs_com/shanyou/57459/o_220125090408_%E9%82%80%E8%AF%B7%E4%BA%8C%E7%BB%B4%E7%A0%81-258px.jpeg" width="170"><br><br>
来源:https://www.cnblogs.com/shanyou/p/13837007.html
頁: [1]
查看完整版本: 微软自家的.Net下的JavaScript引擎--- ClearScript