• 本站域名:OceanCoder.cn 若您喜欢本站,请添加至收藏夹!
  • 网站少部分资源来源自网络,如有侵犯您的权益,请联系站长删除!
  • 本站所有文章,除特殊标明外,皆为本人原创,转载请注明出处,谢谢合作!
  • 本站所下载的资源,若无特殊说明,使用统一解压密码:oceancoder.cn
  • 本站已实现布局自适应,支持手机端、pad端访问,欢迎体验
  • 本站部分资源可通过微信公众号留言获取,欢迎体验

C#后台执行javascript代码#v8.net

C# OceanCoder 2019-05-21 6016 次浏览 4个评论

不介绍各种js引擎了,只说两种方法

方法一:最古老的方法


private static Type type = Type.GetTypeFromProgID("ScriptControl");
        public static string JavaScriptEval(string strJs, string main)
        {
            object scriptControl = ExecJsHelper.GetScriptControl();
            ExecJsHelper.SetScriptControlType(strJs, scriptControl);
            return ExecJsHelper.type.InvokeMember("Eval", BindingFlags.InvokeMethod, null, scriptControl, new object[]
            {
                main
            }).ToString();
        }
        private static Type SetScriptControlType(string strJs, object obj)
        {
            ExecJsHelper.type.InvokeMember("Language", BindingFlags.SetProperty, null, obj, new object[]
            {
                "JScript"
            });
            ExecJsHelper.type.InvokeMember("AddCode", BindingFlags.InvokeMethod, null, obj, new object[]
            {
                strJs
            });
            return ExecJsHelper.type;
        }
        private static object GetScriptControl()
        {
            return Activator.CreateInstance(ExecJsHelper.type);
        }


方法二:v8.net

需要添加引用

V8.Net.dll

V8.Net.SharedTypes.dll

然后需要将V8_Net_Proxy_x64.dll和V8_Net_Proxy_x86.dll两个文件放到程序输出目录下,Web应用放到bin目录下


public static string JSEval(string strjs, string func)
        {
            var V8Engine = new V8Engine();
            Handle result = V8Engine.Execute(strjs + ";" + func);
            return result.ToString();
        }


需要注意的是,方法一有时候执行的结果和方法二不一致,此时以方法二为准!

已有 6016 位网友参与,快来吐槽:

1#lzss  2021-03-20 09:52:57 回复该评论
内存不够的话怎么解决? 见别人的js调试工具都有 设置内存大小的(也就是返回值长度太大了)
2#lzss  2020-04-26 18:17:28 回复该评论
可以附上V8.dll附件吗?,我从网上下载的按照你的步骤总是出错
2#admin  2020-04-28 14:31:08 回复该评论
直接nuget就可以安装的

发表评论