前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微软自家的.Net下的JavaScript引擎--- ClearScript

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

作者头像
张善友
发布2020-10-28 10:18:16
1.6K0
发布2020-10-28 10:18:16
举报
文章被收录于专栏:张善友的专栏

微软开源的 JavaScript引擎——ClearScript(当然,也支持VB Script):https://github.com/microsoft/ClearScript ,昨天做了一个大的改变,就是把C++/CLI代码移除了,这就意味着脱离Windows,可以在linux上运行了。

image
image

园子里有一篇 : C# / .NET Core 调用javascript方法(适用于Windows/Linux平台) 有很好的示例代码:

Microsoft.ClearScript

引入Nuget包,Microsoft.ClearScript

demo.js(原生javascript)

代码语言:javascript
复制
function m(t, e, r) {
    p(v(t))
}

引入Nuget包,Microsoft.ClearScript

代码语言:javascript
复制
using Microsoft.ClearScript.JavaScript;
using Microsoft.ClearScript.V8;

初始化

代码语言:javascript
复制
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相同。

代码语言:javascript
复制
V8Script script = engine.CompileDocument(ScriptFilePath);   // 载入并编译js文件, 然后Execute, 就可以直接调用。
engine.Execute(script);
var result = engine.Script.m("SHAURCOnewayduew&^%5d54nc'KH");  

方案二:将要导入的js方法的代码读出来,然后执行一遍,再调用要执行的js方法

代码语言:javascript
复制
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代码也是可以的

代码语言:javascript
复制
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的默认的那些方法

代码语言:javascript
复制
var result = engine.Invoke("encodeURIComponent", "SHAURCOnewayduew&^%5d54nc'KH"); //只能调用全局方法,如encodeURIComponen
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-10-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Microsoft.ClearScript
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档