C#执行Javascript代码的几种方法

一、开源项目 Javascript .NET

地址: http://javascriptdotnet.codeplex.com/ 它是Google Chrome V8引擎在.NET上的封装,功能完善,性能相对较高,推荐使用! (缺点就是asp.net web应用上,好象会报错)

示例代码:

using Noesis.Javascript;
using System;
using System.Collections.Generic;

namespace JsCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            using (JavascriptContext ctx = new JavascriptContext())
            {
                var i = ctx.Run("1+2");
                Console.WriteLine(i);//3
                ctx.Run("var d = new Date(2013,9-1,2,20,30,15)");
                var d = ctx.GetParameter("d");
                Console.WriteLine(d);//2013/9/2 20:30:15
                var j = ctx.Run("function add(x,y){return x+y;};add(5,10);");
                Console.WriteLine(j);//15
                ctx.Run("var obj = {};obj.name='jimmy';obj.sex='Male';obj.name='杨俊明'");
                var obj = ctx.GetParameter("obj") as Dictionary<string, object>;
                foreach (var key in obj.Keys)
                {
                    Console.WriteLine(string.Format("{0}:{1}", key, obj[key]));
                    //name:杨俊明
                    //sex:Male
                }
                var jsonArr = ctx.Run("[{Airport:'PEK',Name:'北京首都机场'},{Airport:'XIY',Name:'西安咸阳机场'}]") as Array;
                foreach (var item in jsonArr)
                {
                    var json = item as Dictionary<string, object>;
                    foreach (var key in json.Keys)
                    {
                        Console.WriteLine(string.Format("{0}:{1}", key, json[key]));
                        //Airport:PEK
                        //Name:北京首都机场
                        //Airport:XIY
                        //Name:西安咸阳机场
                    }
                }
                ctx.SetParameter("x", 7);
                ctx.Run("function add(x,y){return x+y;}; function sub(x,y){return x-y;};k = add(2,x);var t = sub(9,1);");
                var k = ctx.GetParameter("k");
                Console.WriteLine(k);//9
                var t = ctx.GetParameter("t");
                Console.WriteLine(t);//8
                Console.Read();
            }

        }

    }
}

部署时要注意,msvcp100.dll、msvcr100.dll这二个文件,要复制到bin目录下

 

二、利用Microsoft.JScript.Vsa

先添加Microsoft.JScript、Microsoft.Vsa二个程序集的引用,然后就能用了,示例代码如下:

using Microsoft.JScript;
using Microsoft.JScript.Vsa;
using System;

namespace JsCSharp
{
    class Program
    {
        static VsaEngine Engine = VsaEngine.CreateEngine();

        static void Main(string[] args)
        {
            var i = (int)EvalJScript("1+2;");
            Console.WriteLine(i);//3
            var d = (DateObject)EvalJScript("var d = new Date(2013,9-1,2,20,30,15)");
            Console.WriteLine(d);//Mon Sep 2 20:30:15 UTC+8 2013
            var j = EvalJScript("function add(x,y){return x+y;};add(5,10);");
            Console.WriteLine(j);//15
            var obj = EvalJScript("var obj = {};obj.name='jimmy';obj.sex='Male';");
            Console.WriteLine(obj);//Male 注:只返回最后一条执行的语句结果
            Console.Read();
        }

        static object EvalJScript(string JScript)
        {
            object Result = null;
            try
            {
                Result = Microsoft.JScript.Eval.JScriptEvaluate(JScript, Engine);
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
            return Result;

        }
    }
}

 Vsa的功能比较有限,多条语句执行时,只返回最后一条语句的执行结果。

时间: 2024-08-30 14:27:45

C#执行Javascript代码的几种方法的相关文章

动态加载JavaScript文件的两种方法_javascript技巧

这篇文章主要为大家详细介绍了动态加载JavaScript文件的两种方法,感兴趣的小伙伴们可以参考一下 第一种便是利用ajax方式,把script文件代码从背景加载到前台,而后对加载到的内容经过eval()实施代码.第二种是,动静创建一个script标签,配置其src属性,经过把script标签插入到页面head来加载js,相当于正在head中写了一个<script src="..."></script>,只可是这个script标签是用js动静创建的 比喻说是我们

写出漂亮代码的七种方法

首先我想说明我本文阐述的是纯粹从美学的角度来写出代码,而非技术.逻辑等.以下为写出漂亮代码的七种方法: 1.尽快结束 if 语句 例如下面这个JavaScript语句,看起来就很恐怖: function findShape(flags, point, attribute, list) { if(!findShapePoints(flags, point, attribute)) { if(!doFindShapePoints(flags, point, attribute)) { if(!fin

执行Shell脚本的4种方法及区别介绍

  这篇文章主要介绍了执行Shell脚本的4种方法及区别介绍,本文讲解了相对路径方式.绝对路径方式.bash命令调用.相对或绝对方式以及说下几种方式的区别,需要的朋友可以参考下 执行shell脚本有以下几种方式 1.相对路径方式,需先cd到脚本路径下 代码如下: [root@banking tmp]# cd /tmp [root@banking tmp]# ./ceshi.sh 脚本执行成功 2.绝对路径方式 代码如下: [root@banking tmp]# /tmp/ceshi.sh 脚本执

调试Python程序代码的几种方法总结

  这篇文章主要介绍了调试Python程序代码的几种方法总结,文中代码基于Python2.x版本,需要的朋友可以参考下 程序能一次写完并正常运行的概率很小,基本不超过1%.总会有各种各样的bug需要修正.有的bug很简单,看看错误信息就知道,有的bug很复杂,我们需要知道出错时,哪些变量的值是正确的,哪些变量的值是错误的,因此,需要一整套调试程序的手段来修复bug. 第一种方法简单直接粗暴有效,就是用print把可能有问题的变量打印出来看看: ? 1 2 3 4 5 6 7 8 9 10 # e

javascript密码强度校验代码(两种方法)_javascript技巧

先看效果图: javascript密码强度校验代码,具体实现思路不多说了,请看下面代码和demo. 第一种方法: /* *密码安全程度 *return :全部为字母或者数字,或者密码长度小于 *return : 字母数字组成,或者字母特殊字符,或者数字和特殊字符 *return : 字母和数字和特殊字符 */ String.prototype.passwordStrength=function(){ if(this.length> && this.length<=) retur

JavaScript加密解密7种方法

javascript|加密|解密 本文一共介绍了七种JAVASCRIPT加密方法 在做网页时其实是网页木马呵呵最让人烦恼的是自己辛辛苦苦写出来的客户端IE运行的JAVASCRIPT代码常常被别人轻易的拷贝实在让自己的心里有点不是滋味要知道自己写点东西也挺累的......^*^ 但我们也应该清楚地认识到因为JAVASCRIPT代码是在IE中解释执行要想绝对的保密是不可能的我们要做的就是尽可能的增大拷贝者复制的难度让他知难而退但愿~!~下面我结合自己这几年来的实践及个人研究的心得和大家一起来探讨一下

javascript创建对象的3种方法_javascript技巧

本文为大家分享了js创建对象的多种方法,分享个方法的优劣,具体内容如下 第一种创建对象的方式: 创建JSON对象 推荐使用的场合: 作为函数的参数,临时只用一次的场景.比如设置函数原型对象. var object = { name: "Eric", age: 24, sayHi: function(){ console.log("My name is "+ this.name + " this year is " + this.age + &qu

ASP、PHP根据时段切换CSS皮肤的代码的两种方法

一个网站能切换不同的CSS风格大家应该都了解,像众所周知的腾讯在今年改版时也增加了切换皮肤的功能.根据时间自动调整站点风格是不错的想法,这种根据时间自动调整站点风格也不是什么新鲜事,记得好久以前也见过类似的文章或方法,只不过当时没有特别注意.下面说一下它们的实现方法,目前网上有这样两种实现方法: 一.采用服务端的代码 ASP版本: <link rel="stylesheet" type="text/css" href=" <% if hour(

bat延时执行命令的另一种方法_DOS/BAT

第一种方法: 复制代码 代码如下: ping 127.0.0.1 -n 5000>nul dir c:\ >c:\1.txt 延时5分钟后执行dir c:\ 第二种方法 复制代码 代码如下: :: Sleep.bat - Sleep/Delay/Wait n seconds :: Herbert Kleebauer(Germany) - 2005/05/29 :: Modified by Will Sort - 2005/06/02 @echo off echo q | debug>nu