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", "001");
            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 = "002",
                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 0;
                }

                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();

    }
}
时间: 2024-10-13 10:54:18

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

V8 javascript引擎初步体验

v8 引擎,不必多说,大名鼎鼎,迄今最快的js引擎. 这么好的东西,如果尽在浏览器中使用,太浪费了,也希望用到其他地方,比如一些客户端开发中. 闲言少讲,这就开始 下载源码 去官方网站:https://code.google.com/p/v8/ 我喜欢用git,所以从这里下载 git clone git://github.com/v8/v8.git v8 && cd v8 编译 我为android平台编译的,折腾了好久,记录一些重点.你首先要看这个:http://code.google.c

ICG-智能代码生成器.(权限控制.融入平台).(表单引擎).(最低兼容IE8)

请下拉滚动条... 界面: 1--首先是server制作界面(BS结构).直接上图:   2--点击提交生成一下文件: 各个代表什么一看就懂了...... 3--把上面的文件放到对于的位置.然后编译.然后就ok了.... 打开client中的IBD中的loginin.aspx页面 用admin登陆.(admin未管理员.test为普通用户.这些在平台都可以设置) 登陆进来是这样:其中邮件和分组管理还有用户管理以及app管理都是平台自带的....看下图: 4--现在把刚才生成的app应用加入到平台

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

微软于今日(2015年12月10日)宣布即将开源Chakra核心控件,并改名为“ChakraCore”,该控件包含所有Edge JavaScript 引擎的所有核心功能.ChakraCore 将于下月发布在GitHub中. Chakra提供了顶级的JavaScript处理功能,并具有非常强大的性能优势,非常可靠且方便扩展.微软发言人说:“希望ChakraCore能够继续保持现有的优势,更好的服务云端”. 微软宣称期望集思广益,更好的开发ChakraCore ,期待ChakraCore在未来能够兼

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

浏览器是我们每天几乎都必须使用的软件产品,可是对于自己每天都接触的浏览器,很多同学其实对其一无所知.今天异次元就跟大家说说关于浏览器内核的一些事儿吧,好让你了解多一点稍微内在的东西. 在下面的文章中主要介绍一些常见的浏览器内核和JavaScript引擎,部分内容来自于我在网上找到的资料,还有一些是我自己的理解,不保证完全正确,但是大致应该是没错的.如果有误,请指正…… [本文原作者为武汉小狮子,xxy171070为推荐者,特此声明] 一.浏览器内核 (排版引擎/渲染引擎) 首先解释一下浏览器内核

JavaScript 引擎 V8 执行流程概述

本文首发于 vivo互联网技术 微信公众号? 链接:https://mp.weixin.qq.com/s/t__Jqzg1rbTlsCHXKMwh6A 作者:赖勇高 本文主要讲解的是V8的技术,是V8的入门篇,主要目的是了解V8的内部机制,希望对前端,快应用,浏览器,以及nodejs同学有些帮助.这里不涉及到如何编写优秀的前端,只是对JS内部引擎技术的讲解. 一.V8来源 V8的名字来源于汽车的"V型8缸发动机"(V8发动机).V8发动机主要是美国发展起来,因为马力十足而广为人知.V8

Javascript引擎单线程机制及setTimeout执行原理说明

setTimeout用法在实际项目中还是会时常遇到.比如浏览器会聪明的等到一个函数堆栈结束后才改变DOM,如果再这个函数堆栈中把页面背景先从白色设为红色,再设回白色,那么浏览器会认为DOM没有发生任何改变而忽略这两句话,因此我们可以通过setTimeout把“设回白色”函数加入下一个堆栈,那么就可以确保背景颜色发生过改变了(虽然速度很快可能无法被察觉). 总之,setTimeout增加了Javascript函数调用的灵活性,为函数执行顺序的调度提供极大便利. 然后,我们从基础的层面来看看:理解J

我们应该如何去了解JavaScript引擎的工作原理

我们应该如何去了解JavaScript引擎的工作原理 JavaScript探秘:编写可维护的代码的重要性 JavaScript探秘:谨慎使用全局变量 JavaScript探秘:var预解析与副作用 JavaScript探秘:for循环(for Loops) JavaScript探秘:for-in循环(for-in Loops) JavaScript探秘:Prototypes强大过头了 JavaScript探秘:eval()是"魔鬼" JavaScript探秘:用parseInt()进行

JavaScript引擎、虚拟机、运行时环境浅析

一.JavaScript引擎: 所谓JavaScript引擎是一个专门处理JavaScript脚本的虚拟机,一般会附带在网页浏览器之中,用于解释和执行js脚本. 著名的js引擎: Mozilla:SpiderMonkey引擎,世界第一款JavaScript引擎,有C/C++编写,用于Mozilla Firefox 1.0-3.0版本 Google:V8引擎,由C++/汇编语言编写,用于chrome浏览器 微软:Chakra(查克拉,笑)引擎,用于Internet Explorer 9的32位版本

javascript引擎工作原理

1. 什么是JavaScript解析引擎? 简单地说,JavaScript解析引擎就是能够“读懂”JavaScript代码,并准确地给出代码运行结果的一段程序.比方说,当你写了 var a = 1 + 1; 这样一段代码,JavaScript引擎做的事情就是看懂(解析)你这段代码,并且将a的值变为2. 学过编译原理的人都知道,对于静态语言来说(如Java.C++.C),处理上述这些事情的叫编译器(Compiler),相应地对于JavaScript这样的动态语言则叫解释器(Interpreter)