zoukankan      html  css  js  c++  java
  • 微软自家的.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("
    ", "");
        }
    }
    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("
    ", "");
        }
    }
    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
  • 相关阅读:
    Boost Started on Windows
    7-Zip
    代码的命名规则
    基础扫盲:YEAR关键字 IN操作符
    基础扫盲:INSERT INTO 和 SELECT 结合使用
    知识盲点:存在外键的的表,在插入数据时应该如何操作?
    SQL Identity函数
    SQL 中DateName()函数及DatePart()函数
    OS开发多线程篇—GCD介绍
    经典SQL语句大全
  • 原文地址:https://www.cnblogs.com/shanyou/p/13837007.html
Copyright © 2011-2022 走看看