C#執(zhí)行Javascript代碼的幾種方法總結(jié)
一、開源項目 Javascript .NET
地址: http://javascriptdotnet.codeplex.com/ 它是Google Chrome V8引擎在.NET上的封裝,功能完善,性能相對較高,推薦使用! (缺點就是asp.net web應(yīng)用上,好象會報錯)
示例代碼:
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:'北京首都機(jī)場'},{Airport:'XIY',Name:'西安咸陽機(jī)場'}]") 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:北京首都機(jī)場
//Airport:XIY
//Name:西安咸陽機(jī)場
}
}
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這二個文件,要復(fù)制到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 注:只返回最后一條執(zhí)行的語句結(jié)果
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的功能比較有限,多條語句執(zhí)行時,只返回最后一條語句的執(zhí)行結(jié)果。
相關(guān)文章
C#實現(xiàn)將DataTable內(nèi)容輸出到Excel表格的方法
這篇文章主要介紹了C#實現(xiàn)將DataTable內(nèi)容輸出到Excel表格的方法,較為詳細(xì)的分析了C#基于DataTable保存Excel數(shù)據(jù)的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-08-08C#實現(xiàn)將程序鎖定到Win7任務(wù)欄的方法
這篇文章主要介紹了C#實現(xiàn)將程序鎖定到Win7任務(wù)欄的方法,涉及C#調(diào)用Shell類的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-08-08C#與js實現(xiàn)去除textbox文本框里面重復(fù)記錄的方法
這篇文章主要介紹了C#與js實現(xiàn)去除textbox文本框里面重復(fù)記錄的方法,很實用的功能,需要的朋友可以參考下2014-08-08