C#执行Javascript代码的几种方法总结
发布时间:2023-06-12 10:06:14
标签: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的功能比较有限,多条语句执行时,只返回最后一条语句的执行结果。


猜你喜欢
- ELK是三款软件的简称,分别是Elasticsearch、Logstash、Kibana组成,在发展的过程中,又有新成员Beats的加入,所
- 用户关闭软件时,软件一般会给“是否确认关闭”的提示。通常,我们把它写在FormClosing 事件中,如果确定关闭,就关闭;否则把FormC
- 项目结构这个是在网上找的资源,出处记不得了,记录一下。程序的总体结构,很简单的:核心代码代码如下:ArrComparator.java类im
- 接收到这样一个需求,就是英文名字中firstName和lastName,其中任何一个为null,就返回Empty。刚拿到需求,这不简单,if
- 一.以springboot为例,建立代码1.IExecCommandServer:public interface IExecCommand
- HashMap相同key累加valueimport java.util.HashMap;import java.util.Map;publi
- 效果展示如下所示:实时监控redis环境信息和日志列表Redis配置在windows下安装的redis,在安装目录找到redis.windo
- 好,应大家的要求先给大家说下在JAVA程序中instanceof是什么意思instanceof是Java的一个二元操作符,和==,>,
- 引言内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑。不过世界上不存在
- 本文实例讲述了C#获取真实IP地址实现方法,分享给大家供大家参考。具体实现方法如下:通常来说,大家获取用户IP地址常用的方法是:string
- 本文实例为大家分享了Android实现竖直跑马灯效果的具体代码,供大家参考,具体内容如下首先给出跑马灯效果图中间的色块是因为视频转成GIF造
- 本文实例讲述了Android游戏开发学习②焰火绽放效果实现方法。分享给大家供大家参考。具体如下:本节介绍在游戏开发中常用到的数学物理应用——
- 下边是一些我们常用的正则表达式。自己写的一些正则表达式,可以先在线测评一下。一、校验数字的表达式 1 数字:^[0-9]*$&nb
- 理解hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。
- 在SpringBoot中,当需要获取到配置文件数据时,除了可以用Spring自带的@Value注解外,SpringBoot提供了一种更加方便
- 利用Android的ApiDemos的Rotate3dAnimation实现了个图片3D旋转的动画,围绕Y轴进行旋转,还可以实现Z轴的缩放。
- scheduleAtFixedRate(task,time,period)task-所要安排的任务 time-首次执行任务的时间 perio
- 苹果的iphone 有语音识别用的是Google 的技术,做为Google 力推的Android 自然会将其核心技术往Android 系统里
- 在android编码中,会有一些简便的写法和编码习惯,会导致我们的代码有很多内存泄露的问题,在这里做一个已知错误的总结:1、编写单例的时候常
- 本文实例讲述了Android编程实现网络图片查看器和网页源码查看器。分享给大家供大家参考,具体如下:网络图片查看器清单文加入网络访问权限:&