使用需求

有时候一段Javascript代码写的很棒,而我们又无法将之翻译成.net或翻译之成本很高的时候

我们就可以使用Jint引擎来运行Javascript代码,来得到我们想要的结果

或者上

http://jint.codeplex.com/releases/view/119215

下面代码使用的 0.9.2.0 版本

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Jint; namespace JIntTest
{
/// <summary>
/// 这里一这要是 public,否则JInt无法反射
/// </summary>
public class Student
{
public string Id { get; set; }
public string Name { get; set; }
}
class Program
{
static void Main(string[] args)
{ //简单判断
var b = JavascriptUtil.Execute<int>("1>0", null);
//直接给参数赋值
       string str = "var stu={};stu.Id=Id;stu.Name=Name; return stu.Id";

            Dictionary<string, object> dict = new Dictionary<string, object>();
            dict.Add("Id", "");
dict.Add("Name", "Aven");
var c = JavascriptUtil.Execute<string>(str, dict); //通过类实例来赋值
Dictionary<string, object> dict2 = new Dictionary<string, object>();
var st = new Student//这里一定要使用public
{
Id = "",
Name = "Grace"
};
dict2.Add("ST",st);
var str2 = "var stu={};stu.Id=ST.Id;stu.Name=ST.Name; return stu.Id";
var d = JavascriptUtil.Execute<string>(str2, dict2); } public static string ReadFile(string path)
{
StreamReader sr = new StreamReader(path, Encoding.Default);
String line;
StringBuilder sb = new StringBuilder();
while ((line = sr.ReadLine()) != null)
{
sb.AppendLine(line); }
return sb.ToString(); } }
public static class JavascriptUtil
{ static JavascriptUtil()
{ } public static object Execute<T>(string expression, Dictionary<string, object> args)
{ if (string.IsNullOrEmpty(expression))
{
if (typeof(T) == typeof(int) || typeof(T) == typeof(decimal) || typeof(T) == typeof(double) || typeof(T) == typeof(float)) {
return ;
} if (typeof(T) == typeof(DateTime))
{
return DateTime.MinValue;
} if (typeof(T) == typeof(string))
{
return "";
} return default(T);
} if(typeof(T)==typeof(int))
{
var result = JintExecute(expression, args);
return Convert.ToInt32(result);
}
if (typeof(T) == typeof(decimal )) {
var result = JintExecute(expression, args);
return Convert.ToDecimal(result);
}
if (typeof(T) == typeof(double )) {
var result = JintExecute(expression, args);
return Convert.ToDouble(result);
}
if (typeof(T) == typeof(DateTime )) {
var result = JintExecute(expression, args);
return Convert.ToDateTime(result);
} return JintExecute(expression, args);
} public static object JintExecute(string expression, Dictionary<string, object> args)
{
var engine = _engine; if (args != null)
{
foreach (var x in args)
{
engine.SetParameter(x.Key, x.Value);
}
}
return engine.Run(expression) ;
} private static JintEngine _engine= new JintEngine(); }
}

Jint .net平台的javascript引擎的更多相关文章

  1. 浏览器-09 javascript引擎和Chromium网络栈

    语言的运行 C/C++语言 使用编译器直接将它们编译成本地代码(机器指令),这是由开发人员在代码编写完成之后实施; 用户只是使用这些编译好的本地代码,这些本地代码被系统的加载器加载执行,由操作系统调度 ...

  2. 微软Edge 内嵌的JavaScript 引擎即将开源

    微软于今日(2015年12月10日)宣布即将开源Chakra核心控件,并改名为“ChakraCore”,该控件包含所有Edge JavaScript 引擎的所有核心功能.ChakraCore 将于下月 ...

  3. 理解WebKit和Chromium: JavaScript引擎简介

    转载请注明原文地址:http://blog.csdn.net/milado_nju 1. 什么是JavaScript引擎 什么是JavaScript引擎?简单来讲,就是能够提供执行JavaScript ...

  4. 【转】理解WebKit和Chromium: JavaScript引擎简介

    转载请注明原文地址:http://blog.csdn.net/milado_nju1. 什么是JavaScript引擎什么是JavaScript引擎?简单来讲,就是能够提供执行JavaScript代码 ...

  5. V8 javascript 引擎

    V8是一个由丹麦Google开发的开源java script引擎,用于Google Chrome中.[2]Lars Bak是这个项目的组长.[3]   V8在执行之前将java script编译成了机 ...

  6. javascript与java的相互调用,纯java的javascript引擎rhino(转载)

    1.下载Rhino安装包,下载地址:官网http://www.mozilla.org/rhino. 2.rhino环境配置,把解压出来的js.jar文件加入到系统的环境变量classpath 3.在命 ...

  7. 关于浏览器内核与javascript引擎的一些小知识

    浏览器是我们每天几乎都必须使用的软件产品,可是对于自己每天都接触的浏览器,很多同学其实对其一无所知.今天异次元就跟大家说说关于浏览器内核的一些事儿吧,好让你了解多一点稍微内在的东西. 在下面的文章中主 ...

  8. JavaScript 引擎 V8 执行流程概述

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/t__Jqzg1rbTlsCHXKMwh6A作者:赖勇高 本文主要讲解的是V8的技术,是V8的入 ...

  9. [WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析

    [WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析 标签: webkit内核JavaScriptCore 2015-03-26 23:26 2285 ...

随机推荐

  1. 网页设计:Meta标签详解

    很多人忽视了HTML标签META的强大功效,一个好的META标签设计可以大大提高你的个人网站被搜索到的可能性,有兴趣吗,谁我来重新认识一下META标签吧! META标签是HTML语言HEAD区的一个辅 ...

  2. Linux中TFTP使用详解

    FTP协议简介TFTP是用来下载远程文件的最简单网络协议,它其于UDP协议而实现. linux服务器端tftp-server的配置1.安装tftp服务器需要安装xinetd(守护tftp).tftp和 ...

  3. android开发------编写用户界面之相对布局

    今天要说的是RelativeLayout.RelativeLayout相对于LinearLayout的主要不同点在于它需要一个参照物. 我们先来看一下官方对这个布局的解释: RelativeLayou ...

  4. 十天冲刺---Day3

    站立式会议 站立式会议内容总结: git上Issues新增内容: 燃尽图 照片 组长情绪爆炸是很可怕的事情.这里自责一下. 进度缓慢是一件非常头疼的事情.还有每个人的时间都很紧张,除了学习,还有各种工 ...

  5. js中return的用法

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  6. python+urllib+beautifulSoup实现一个简单的爬虫

    urllib是python3.x中提供的一系列操作的URL的库,它可以轻松的模拟用户使用浏览器访问网页. Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能 ...

  7. HttpModule与HttpHandler详解

    ASP.NET对请求处理的过程:当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给 ASPNET_ISAPI.dll,A ...

  8. Redis集群(五):集群搭建

    一.本文目的        演示在一台机器上搭建3主3从的redis集群,通过演示了解redis集群的搭建,使用和注意事项     二.搭建说明        1.同一台机器搭建3主3从的伪集群   ...

  9. javascript 方法实例

    输出对象的属性名称与值 : boj(o){ for(var p in o){ console.log(p + ":" + o[p] + "\n"); } } 构 ...

  10. 51nod 1434 理解lcm

    1434 区间LCM 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 一个整数序列S的LCM(最小公倍数)是指最小的正 ...