c#JS调用
来源:互联网 发布:贾斯汀比伯中国知乎 编辑:程序博客网 时间:2024/05/30 05:17
using MSScriptControl;using System;using System.Collections.Generic;using System.Reflection;using System.Text;using v8sharp;namespace Js调用{ class Program { static void Main(string[] args) { string reString = @" function MessageBox(s) { return 'Hellow ' + s; } "; string MethodName = "MessageBox"; string para = "'bbs.msdn5.com'"; //请先引用 Interop.MSScriptControl.dll Framework4.0 引用 Interop.MSScriptControl_fr40 // string info =RunMethod(reString,para,MethodName); //Run //string info = EvalMethod(reString, para, MethodName); //Eval string info = V8Method(reString, para, MethodName); //V8 Console.WriteLine(info); Console.ReadKey(); } /// <summary> /// 执行js V8方法 /// </summary> /// <param name="reString">Js代码</param> /// <param name="para">参数字符串(使用逗号分隔)</param> /// <param name="MethodName">方法名称</param> static string V8Method(string reString, string para, string MethodName) { V8Engine engine = V8Engine.Create();//创建V8对象 V8Script script = engine.Compile(reString);//编译 try { engine.Execute(script);//将编译的脚本加载到V8引擎中 string res = engine.Execute(string.Format("{0}({1})", MethodName, para)).ToString();//执行结果 return res; } catch (Exception ex) { return ex.Message;//异常信息 } } /// <summary> /// 执行js Eval方法 /// </summary> /// <param name="reString">Js代码</param> /// <param name="para">参数字符串(使用逗号分隔)</param> /// <param name="MethodName">方法名称</param> static string EvalMethod(string reString, string para, string MethodName) { try { Type obj = Type.GetTypeFromProgID("ScriptControl"); if (obj == null) return ""; //使用默认构造函数创建对象实例 object ScriptControl = Activator.CreateInstance(obj); // InvokeMember 设置属性 obj.InvokeMember("Language", BindingFlags.SetProperty, null, ScriptControl, new object[] { "JScript" }); obj.InvokeMember("AddCode", BindingFlags.InvokeMethod, null, ScriptControl, new object[] { reString }); //执行当前对象的方法(方法名) InvokeMethod 异步执行某一个方法 return obj.InvokeMember("Eval", BindingFlags.InvokeMethod, null, ScriptControl, new object[] { string.Format("{0}({1})", MethodName, para) }).ToString();//执行结果 } catch (Exception ex) { string ErrorInfo = string.Format("执行JS出现错误: \r\n 错误描述: {0} \r\n 错误原因: {1} \r\n 错误来源:{2}", ex.Message, ex.InnerException.Message, ex.InnerException.Source);//异常信息 return ErrorInfo; } } /// <summary> /// 执行js Run方法 /// </summary> /// <param name="reString">Js代码</param> /// <param name="para">参数字符串(使用逗号分隔)</param> /// <param name="MethodName">方法名称</param> static string RunMethod(string reString, string para, string MethodName) { ScriptControlClass sc = new ScriptControlClass(); try { sc.UseSafeSubset = true;//大家自行查询下具体代表的含义. sc.Language = "JScript"; //Asp vbScritp JScript!= JavaScript sc.AddCode(reString); string[] str = para.Split(','); object[] obj = new object[str.Length]; for (int i = 0; i < str.Length; i++) { obj[i] = str[i]; } return sc.Run(MethodName, obj).ToString(); //执行结果 } catch (Exception ex) { if (sc.Error.Source != null) { string txt = sc.Error.Text == null ? "" : sc.Error.Text; string ErrorInfo = string.Format("执行JS出现错误: \r\n 第{0}行,第{1}列, \r\n 错误描述: {2}: {3};\r\n 错误Code:{4}", sc.Error.Line.ToString(), sc.Error.Column.ToString(), sc.Error.Source, sc.Error.Description.ToString() + txt, sc.Error.Number.ToString()); // ErrorInfo 异常信息 return txt + ErrorInfo; } else { // ex.Message; 异常信息 return ex.Message; } } } }}
0 0
- c#JS调用
- c/c++/MFC 调用 js 函数代码
- c/c++/MFC 调用 js 函数代码
- c/c++/MFC 调用 js 函数代码
- 在客户端(js)调用服务器端方法(C#)
- js调用后台方法、变量(C#)
- js 调用C#.NET后台方法 【收藏】
- Objective-c与js相互调用
- cocos2d js 调用object-c 方法
- JS和C#方法相互调用
- Cocos Creator 实现js调用object-c
- 在<c:foreach 里面调用js代码
- AcomLb.Components.Jscript,一些常用的Js调用(C#)
- Objective-c与js相互调用及传参数注意
- js中调用C标签实现百度地图
- HTML页面,测试JS对C函数的调用
- Cocos2d-js 3.0 jsb环境调用底层Objective-C代码
- UIWebView 与 JS 交互(1):Objective-C 调用 Javascript
- C#多线程同步事件及等待句柄AutoResetEvent 和 ManualResetEvent
- C# 与 SQLite的操作
- Sqlite创建增删改查
- Androidstudio安装AVD出现no system images installed for this target解决方案
- C#嵌入dll到资源释放的问题
- c#JS调用
- 【抓包工具】wireshark
- c#编码转换
- CodeForces - 519D A and B and Interesting Substrings (前缀和)
- Sniffer的完整代码,基于winpcap抓包统计吞吐量
- windows下使用C#获取特定进程网络流量
- SharpPcap网络包捕获框架的使用--实例代码在vs2005调试通过
- 使用SharpPCap在C#下进行网络抓包
- c#datagridview