C#中是否可以执行脚本语言

yz_zcg 2012-03-19 03:18:31
请问大家
在C#中是否可以调用解释执行的脚本语言,例如JavaScript,VBScript等。
...全文
414 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
hwbox 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 hzzasdf 的回复:]
这个本质上是调用微软的JScript解释引擎来解释执行javascript,个别方法不支持,如alert
[/Quote]
我这个类是我的CMS里用来做标签参数表达式值运算的。当然不需要弹窗这类的。
色拉油 2012-03-20
  • 打赏
  • 举报
回复
不可以执行,脚本语言是写给浏览器认的,但是在页面上写好,却可以在C#中让它在页面执行,注意不是在C#中执行

Page.ClientScript.RegisterStartupScript
startstartsvip 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hwbox 的回复:]

我正在用的js解释器
C# code

/// <summary>
/// JSEngine 在后台运行js的解释器返回值
/// </summary>
public class JSEngine
{
//初始化加载程序的字符串;
public static readonly String _jsString = @"c……
[/Quote]

真没用过,支持一下
nonocast 2012-03-20
  • 打赏
  • 举报
回复
Jint
  • 打赏
  • 举报
回复
这个本质上是调用微软的JScript解释引擎来解释执行javascript,个别方法不支持,如alert
hwbox 2012-03-19
  • 打赏
  • 举报
回复
public static object StringEval(string inp_JSFunctionString, string inp_JSFunctionClassName, string inp_JSFunctionClassFuncName, object[] inp_ParameterObject)

这个重载是用来生成自己的js类,并调用其中方法的
dys_198102 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bdmh 的回复:]

C# code

Response.Write("<script>alert('irow=" + Session["irow"].ToString() + "');</script>");
[/Quote]
hitsoft07 2012-03-19
  • 打赏
  • 举报
回复
ScriptRunTime
hwbox 2012-03-19
  • 打赏
  • 举报
回复
我这个是用来在后台计算javascript表达示值的,所以直接指定了类和方法名,只让你输入方法中的执行语句。你可以改成自己的。
hwbox 2012-03-19
  • 打赏
  • 举报
回复
我正在用的js解释器

/// <summary>
/// JSEngine 在后台运行js的解释器返回值
/// </summary>
public class JSEngine
{
//初始化加载程序的字符串;
public static readonly String _jsString = @"class theEval{ public function Eval(str:String):String {return eval(str)}}";
public static readonly String _jsClassName = @"theEval";
public static readonly String _jsMethodName = @"Eval";
//定义对象
public static object _evalObject = new object();
public static Type _evalType = new object().GetType();


//构造函数
static JSEngine()
{
CreatJSEngine(ref _evalObject, ref _evalType, _jsString, _jsClassName);
}

/// <summary>
/// 初始化引擎的方法
/// </summary>
/// </summary>
/// <param name="evalObject">指定一个 已存在的变量 保存 使用evalType的类型生成一个实例</param>
/// <param name="evalType">指定一个 已存在的变量 保存 生成的程序集中有指定名称的对象type</param>
/// <param name="jsString">指定用来生成程序集的代码文本</param>
/// <param name="jsClassName">指定用来进行调用的程序集中的类别名称</param>
private static void CreatJSEngine(ref object evalObject, ref Type evalType, string jsString, string jsClassName)
{
CodeDomProvider _provider = new JScriptCodeProvider();
CompilerParameters _parameters = new CompilerParameters();
_parameters.GenerateInMemory = true;
CompilerResults _result = _provider.CompileAssemblyFromSource(_parameters, jsString);
Assembly _assembly = _result.CompiledAssembly;
evalType = _assembly.GetType(jsClassName);
evalObject = Activator.CreateInstance(evalType);
}

/// <summary>
/// StringEval
/// </summary>
/// <param name="inp_JSString">传入一个表达式</param>
/// <returns>返回一个表达式的值</returns>
public static object StringEval(string inp_JSString)
{
return _evalType.InvokeMember(_jsMethodName, BindingFlags.InvokeMethod, null, _evalObject, new object[] { inp_JSString });
}

/// <summary>
/// StringEval
/// </summary>
/// <param name="inp_JSFunctionString">指定用来生成程序集的代码文本</param>
/// <param name="inp_JSFunctionClassName">指定用来进行调用的程序集中的类别名称</param>
/// <param name="inp_JSFunctionClassFuncName">指定用来进行调用的程序集中的类别中的函数的名称</param>
/// <param name="inp_ParameterObject">要传递到程序集中的变量对象数组,无参时使用 new object[0]</param>
/// <returns>返回函数调用的值</returns>
public static object StringEval(string inp_JSFunctionString, string inp_JSFunctionClassName, string inp_JSFunctionClassFuncName, object[] inp_ParameterObject)
{
object ClosureevalObject = null;
Type ClosureevalType = null;
CreatJSEngine(ref ClosureevalObject, ref ClosureevalType, inp_JSFunctionString, inp_JSFunctionClassName);
return ClosureevalType.InvokeMember(inp_JSFunctionClassFuncName, BindingFlags.InvokeMethod, null, ClosureevalObject, inp_ParameterObject);
}

/// <summary>
/// StringEval
/// </summary>
/// <param name="inp_JSString">传入一个表达式</param>
/// <param name="inp_theType">指定的要返回的值类型</param>
/// <returns>返回的值</returns>
public static object StringEval(string inp_JSString, Type inp_theType)
{
return Microsoft.JScript.Convert.Coerce(_evalType.InvokeMember(_jsMethodName, BindingFlags.InvokeMethod, null, _evalObject, new object[] { inp_JSString }), inp_theType);
}
}
莫忘初心svip 2012-03-19
  • 打赏
  • 举报
回复
可以用lua,paxscript,v8等,也可以用CodeDomProvider动态执行C#代码
zyug 2012-03-19
  • 打赏
  • 举报
回复 1
同4楼,我还用过~~~~
直接拉别人的js,得到运行结果,连破解都省了~~~
@信心 2012-03-19
  • 打赏
  • 举报
回复
只能通过控件方式运行。
yz_zcg 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chinajiyong 的回复:]

引用楼主 yz_zcg 的回复:
请问大家
在C#中是否可以调用解释执行的脚本语言,例如JavaScript,VBScript等。

你要在具体点,ASP.NET那是可以的,
[/Quote]

是指C#程序语言,不是ASP.NET,不在客户端浏览器运行。
EnForGrass 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 yz_zcg 的回复:]
请问大家
在C#中是否可以调用解释执行的脚本语言,例如JavaScript,VBScript等。
[/Quote]
你要在具体点,ASP.NET那是可以的,
stonespace 2012-03-19
  • 打赏
  • 举报
回复
或者用msscript.ocx,微软的脚本控件,
porschev 2012-03-19
  • 打赏
  • 举报
回复

如果是Asp.NET那可以。。

Page.ClientScript.RegisterStartupScript

Page.ClientScript.XX

...
bdmh 2012-03-19
  • 打赏
  • 举报
回复

Response.Write("<script>alert('irow=" + Session["irow"].ToString() + "');</script>");
stonespace 2012-03-19
  • 打赏
  • 举报
回复
不能,需要第三方类库解释执行,

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧