Jint .net平台的javascript引擎
使用需求
有时候一段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引擎的更多相关文章
- 浏览器-09 javascript引擎和Chromium网络栈
语言的运行 C/C++语言 使用编译器直接将它们编译成本地代码(机器指令),这是由开发人员在代码编写完成之后实施; 用户只是使用这些编译好的本地代码,这些本地代码被系统的加载器加载执行,由操作系统调度 ...
- 微软Edge 内嵌的JavaScript 引擎即将开源
微软于今日(2015年12月10日)宣布即将开源Chakra核心控件,并改名为“ChakraCore”,该控件包含所有Edge JavaScript 引擎的所有核心功能.ChakraCore 将于下月 ...
- 理解WebKit和Chromium: JavaScript引擎简介
转载请注明原文地址:http://blog.csdn.net/milado_nju 1. 什么是JavaScript引擎 什么是JavaScript引擎?简单来讲,就是能够提供执行JavaScript ...
- 【转】理解WebKit和Chromium: JavaScript引擎简介
转载请注明原文地址:http://blog.csdn.net/milado_nju1. 什么是JavaScript引擎什么是JavaScript引擎?简单来讲,就是能够提供执行JavaScript代码 ...
- V8 javascript 引擎
V8是一个由丹麦Google开发的开源java script引擎,用于Google Chrome中.[2]Lars Bak是这个项目的组长.[3] V8在执行之前将java script编译成了机 ...
- javascript与java的相互调用,纯java的javascript引擎rhino(转载)
1.下载Rhino安装包,下载地址:官网http://www.mozilla.org/rhino. 2.rhino环境配置,把解压出来的js.jar文件加入到系统的环境变量classpath 3.在命 ...
- 关于浏览器内核与javascript引擎的一些小知识
浏览器是我们每天几乎都必须使用的软件产品,可是对于自己每天都接触的浏览器,很多同学其实对其一无所知.今天异次元就跟大家说说关于浏览器内核的一些事儿吧,好让你了解多一点稍微内在的东西. 在下面的文章中主 ...
- JavaScript 引擎 V8 执行流程概述
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/t__Jqzg1rbTlsCHXKMwh6A作者:赖勇高 本文主要讲解的是V8的技术,是V8的入 ...
- [WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析
[WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析 标签: webkit内核JavaScriptCore 2015-03-26 23:26 2285 ...
随机推荐
- golang: 把sql结果集以json格式输出
func getJSON(sqlString string) (string, error) { stmt, err := db.Prepare(sqlString) if err != nil { ...
- Maven的内置变量
Maven内置变量说明: ${basedir} 项目根目录(即pom.xml文件所在目录) ${project.build.directory} 构建目录,缺省为target目录 ${project. ...
- Android studio 提高导入项目的速度
最近在下载了一些开源的项目在学习,在导入as时,速度要好慢,如项目大点,就更慢了,实在是坑啊! 那有没有方法能导入时间快点呀! 分析发现,as在导入项目是首先是读 来自为知笔记(Wiz)
- find常见用法
Linux中find常见用法示例 ·find path -option [ -print ] [ -exec -ok command ] {} \; find命令的参数 ...
- iOS开发小技巧--TableView中headerView的循环利用,以及自定义的headerView
一.首先要搞清楚,tableView中有两种headerView,一个是tableHeaderView,另一个是headerView.前者就一个;后者根据session决定个数 headerView的 ...
- 学习Spring(一) 实例化Spring IoC容器
实例化Spring IoC容器 1,读取其配置来创建bean实例 2,然后从Spring IoC容器中得到可用的bean实例 Spring提供两种IoC容器实现类型 a,一种为bean工厂 b,应用程 ...
- Edge Model
三种edge Step (阶梯) Ramp (坡) Roof 因为噪声的存在, ramp edge是最常见的. 一阶和二阶算子在ramp edge处的表现 一阶和二阶算子对噪声的敏感性 从上自下, 高 ...
- python 进程间共享数据 (三)
Python的multiprocessing模块包装了底层的机制,提供了Queue.Pipes等多种方式来交换数据. 我们以Queue为例,在父进程中创建两个子进程,一个往Queue里写数据,一个从Q ...
- [日常训练]training
Description 一条线上有栋楼,第栋楼有层,每层有1个价值为的物品. 可以花费1个单位时间完成以下3种移动: 1.在同一栋楼中向上或者向下走一层; 2.如果此刻在顶楼,可以通往1楼; 3.从当 ...
- 【BZOJ-3437】小P的牧场 DP + 斜率优化
3437: 小P的牧场 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 705 Solved: 404[Submit][Status][Discuss ...