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

Posted 自由、创新、研究、探索

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微软自家的.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

以上是关于微软自家的.Net下的JavaScript引擎——ClearScript的主要内容,如果未能解决你的问题,请参考以下文章

探索JavaScript之DOM的世界

微软自家沙盒 Sandbox公布

微软低头,Chrome 一统浏览器!

微软自家的Linux发行版开源了!

微软自家服务如Microsoft 365将在明年这个时候终止IE11浏览器的支持

为了证明 Windows 11 有多安全,微软亲自「黑」掉了自家电脑