关于动态执行代码(js的Eval)

小兵在努力奋斗

小兵在努力奋斗

2016-02-19 14:41

get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是关于动态执行代码(js的Eval),一起来学习了解下吧!

熟悉javascript的朋友对Eval()函数可能都不会陌生,我们可以用它来实现动态代码的执行,我自己甚至写过一个网页专门用来计算算术表达式的,计算能力上比google、baidu的计算器还要好一些,至少精度要高,但是如果超出了四则运算的话,表达式的形式会复杂很,比如以百度给出的例子:

log((5+5)^2)-3+pi需要写成Math.log(Math.pow(5+5,2))*Math.LOG10E-3+Math.PI才能用Eval进行计算,对于这一点我还没有想到理想的解决方案。好了,这不是本文正题,我们姑且放过。        博客园里曾经见人用过下面的代码,至少从代码形式上挺简单的:

 

 // csc.exe noname1.cs /r:C:WINDOWSMicrosoft.NETFrameworkv1.1.4322Microsoft.JScript.dll

//注:需加入Microsoft.JScript与Microsoft.Vsa两个命名空间。

public class Class1

{

    static void Main(string[] args)

    {

        System.Console.WriteLine("Hello World");

        string Expression = "var result:int =0;result==1?"成功":"失败"";

        Microsoft.JScript.Vsa.VsaEngine ve = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();

        Console.WriteLine(Microsoft.JScript.Eval.JScriptEvaluate(Expression, ve));

    }

}
 

不过,令人不爽的是,编译环境现在给出如下警告:'Microsoft.JScript.Vsa.VsaEngine' is obsolete: 'Use of this type is not recommended because it is being deprecated in Visual Studio 2005; there will be no replacement for this feature. Please see the ICodeCompiler documentation for additional help.'当然,代码可以编译通过,且执行是正常的。

       下面我给出另外一种直接使用javascript的Eval函数的方法,借助于com组件,引用路径是 %SystemRoot%system32msscript.ocx ,我将完整的代码直接贴出来。

 using System;

using System.Collections.Generic;

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)

using System.Text;

using System.Diagnostics;

namespace ScriptProgramming

{

    class Program

    {

        static void Main(string[] args)

        {

            string strExpression = "1+2*3";

            string strResult = Eval(strExpression);

            Console.WriteLine(strExpression + "=" + strResult);

 

            Console.WriteLine("Press any key to continue.");

            Console.ReadKey();

        }

        /// summary

        /// 引用com组件Microsoft Script Control

        /// %SystemRoot%system32msscript.ocx

        /// 该函数用来动态执行代码

        /// /summary

        /// param name="Expression"/param

        /// returns/returns

        public static string Eval(string Expression)

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)

        {

            string strResult = null;

            try

            {

                MSScriptControl.ScriptControlClass jscript = new MSScriptControl.ScriptControlClass();

                jscript.Language = "JScript";               

                strResult = jscript.Eval(Expression).ToString();

            }

            catch (Exception ex)

            {

                Debug.Fail(ex.Message);              

            }

            return strResult;

        }

    }

}
 

展开更多 50%)
分享

猜你喜欢

关于动态执行代码(js的Eval)

Web开发
关于动态执行代码(js的Eval)

js eval木马代码,以后再分析吧

Web开发
js eval木马代码,以后再分析吧

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

动态控制Table的js代码

Web开发
动态控制Table的js代码

关于文本限制字数的js代码

Web开发
关于文本限制字数的js代码

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

js实现iframe动态调整高度的代码

Web开发
js实现iframe动态调整高度的代码

js代码解密

Web开发
js代码解密

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

微软为什么把windows 7系统叫为windows 7呢?

微软为什么把windows 7系统叫为windows 7呢?

Delphi for PHP测试手记

Delphi for PHP测试手记
下拉加载更多内容 ↓