c#运行JS代码

来源:互联网 发布:oncity中山网络社区 编辑:程序博客网 时间:2024/05/17 07:29

Jint, 

Gitbub网址:https://github.com/sebastienros/jint

编译好的dll文件:https://pan.baidu.com/s/1qYhSM64


使用方法示例:

class Program{    static Jint.Engine _engine;      public static void Print(object s)    {        if (s == null)            s = "null";        Console.WriteLine(s.ToString());    }      private static Jint.Engine CreateEngine()    {        return new Engine().SetValue("print", new Action<object>(Print));    }      static void Main(string[] args)    {        var source = @"            var s = 'Hello World From JavaScript ';              for(var i=0; i<4; i++) {                print(s + i);            }                            s; // Evaluate and return the expression        ";        var s = CreateEngine().Execute(source).GetCompletionValue();        Console.WriteLine(s.AsString());        Console.ReadLine();    }}

更多教程,访问:http://frederictorres.blogspot.jp/2014/04/jint-tutorials.html

注意,Jint默认不支持escape和unescape函数,如果代码中有用到这两个函数,需要自己自定义一下。

var escape = function (s) {    s = s.toString(s);    var n = s.length;    var result = "";     for(var k = 0; k < n; k++) {        var c = s[k];        var S = "";        var code = c.charCodeAt(0);         if(("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@*_+-./").indexOf(c) > -1) {            S = c;        }        else if(code < 256) {            S = '%' + code.toString(16);        }        else {            S = code.toString(16);            S = "%u" + ("0000").substring(0, 4 - S.length) + S;         }        result = result + S;    }    return result;}; var unescape = function (s) {    s = s.toString(s);    var n = s.length;    var result = "";     for(var k = 0; k < n; k++) {        var c = s[k];        if(c == '%') {            if(k <= (n - 6)) {                if(s[k + 1] == 'u') {                    if(("0123456789abcdef").indexOf(s[k + 2]) > -1 &&                       ("0123456789abcdef").indexOf(s[k + 3]) > -1 &&                       ("0123456789abcdef").indexOf(s[k + 4]) > -1 &&                       ("0123456789abcdef").indexOf(s[k + 5]) > -1) {                            c = String.fromCharCode(parseInt(s.substring(k + 2, k + 7), 16));                            k = k + 5;                       }                       else {                            if(k <= (n - 3) &&                             ("0123456789abcdef").indexOf(s[k + 1]) > -1 &&                             ("0123456789abcdef").indexOf(s[k + 2]) > -1)                            {                                c = String.fromCharCode(parseInt(("00" + s.substring(k + 1, k + 3)), 16));                                k = k + 2;                            }                       }                }                else {                    if(k <= (n - 3) &&                       ("0123456789abcdef").indexOf(s[k + 1]) > -1 &&                       ("0123456789abcdef").indexOf(s[k + 2]) > -1) {                        c = String.fromCharCode(parseInt(("00" + s.substring(k + 1, k + 3)), 16));                        k = k + 2;                    }                }            }            else if(("0123456789abcdef").indexOf(s[k + 1]) > -1 &&                    ("0123456789abcdef").indexOf(s[k + 2]) > -1) {                c = String.fromCharCode(parseInt(("00" + s.substring(k + 1, k + 3)), 16));                k = k + 2;            }        }        result = result + c;    }     return result;};

原创粉丝点击