C# 执行Javascript脚本
前一阵子使用C#编写SCXML状态机,需要解析EMCScript表达式,使用了Jint库(https://github.com/sebastienros/jint/),当时感觉与C#之间的数据转换不是很方便。这两天有时间又关注了一下,发现新的3.0版本有了很大改进,在这里介绍给大家,供参考。
首先要安装nuget包,注意增加prerelease选项,安装最新的版本,使用dotnet命令行指令如下:
dotnet add package Jint --prerelease
直接计算表达式:
Console.WriteLine("直接计算表达式:(1+2)*3");
var r1= e.Evaluate("(1+2)*3");
Console.WriteLine(r1);
字符串操作:
Console.WriteLine("字符串操作:'abc'.length");
var r2=e.Evaluate("'abc'.length");
Console.WriteLine(r2);
Console.WriteLine("-----------------------");
Console.WriteLine("字符串操作:'abc'.substr(2)");
var r3=e.Evaluate("'abc'.substr(2)");
Console.WriteLine(r3);
可以使用SetValue给JS变量赋值:
var e2 = new Engine()
.SetValue("x", 1)
.SetValue("y",2);
var r4=e2.Evaluate("x+y");
Console.WriteLine(r4);
可以使用对象进行C#和JS之间的数据交换:
var myobj= new Student {
Name="张三"
};
Console.WriteLine(myobj.Name);
var e4 = new Engine()
.SetValue("student", myobj)
.Execute("student.Name = '李四'");
Console.WriteLine(myobj.Name);
可以将C#函数委托给JS引擎,在JS代码中调用这些函数:
Console.Write("将CSharp函数设置给Js引擎");
var engine = new Engine()
.SetValue("log", new Action<object>(Console.WriteLine));
engine.Execute(@"
function hello() {
log('Hello World');
};
hello();
");
也可以从CSharp 调用JS的函数:
Console.WriteLine("调用JS函数计算BMI");
var e5=new Engine()
.Execute("function bmi(weight, height) { return weight/height/height; }");
Console.WriteLine(e5.Invoke("bmi",75,1.75));
可以引入CLI,从而在JS引擎中调用CLI中的函数:
Console.WriteLine("调用.Net函数写入文件");
var e6 = new Engine(cfg => cfg.AllowClr());
e6.Execute(@"var f=System.IO.StreamWriter('sayhello.log');
f.WriteLine('你好 !');
f.Dispose();");
示例可以从github下载:https://github.com/zhenl/CSharpScriptDemo,本文示例在JSInCSharp项目中。
C# 执行Javascript脚本的更多相关文章
- 在WebBrowser中执行javascript脚本的几种方法整理(execScript/InvokeScript/NavigateScript) 附完整源码
[实例简介] 涵盖了几种常用的 webBrowser执行javascript的方法,详见示例截图以及代码 [实例截图] [核心代码] execScript方式: 1 2 3 4 5 6 7 8 9 1 ...
- Java执行JavaScript脚本破解encodeInp()加密
一:背景 在模拟登录某网站时遇到了用户名和密码被JS进行加密提交的问题,如图: 二:解决方法 1.我们首先需要获得该JS加密函数,一般如下: conwork.js var keyStr = " ...
- Selenium执行JavaScript脚本
JavaScript是运行在客户端(浏览器)和服务器端的脚本语言,允许将静态网页转换为交互式网页.可以通过 Python Selenium WebDriver 执行 JavaScript 语句,在We ...
- JQuery html API支持解析执行Javascript脚本功能实现-代码分析
JQuery html用法(功能类似innerHTML) 开发中需要使用Ajax技术来更新页面局部区域, 使用的方法是ajax获取html代码段(字符串),然后将这个html代码段作为参数,传入目标D ...
- Python爬虫(二十四)_selenium案例:执行javascript脚本
本章叫介绍如何使用selenium在浏览器中使用js脚本,更多内容请参考:Python学习指南 隐藏百度图片 #-*- coding:utf-8 -*- #本篇将模拟执行javascript语句 fr ...
- 【Android】不使用WebView来执行Javascript脚本(Rhino)
前言 动态执行脚本能有效的降低重要功能硬编码带来的问题,尤其是依赖于第三方的应用,可以通过动态脚本+在线参数(例如友盟在线参数)再不更新应用的情况下升级功能. 声明 欢迎转载,但请保留文章原始出处:) ...
- IOS中UIWebView执行javaScript脚本时注意点
1.webView之所以能够滚动,因为它内部有一个UIScrollView子控件 2.移除webView顶部和底部灰色的一层view * 遍历webView中scrollView内部的所有子控件 * ...
- c# 执行javascript 脚本
/// <summary> /// 执行JS /// this.ExecuteScript("get('{0}')".FormatWith(token0), File. ...
- 基于Selenium2+Java的UI自动化(5) - 执行JavaScript脚本
一.操作日期选择框 QQ图片20161118215530.png1336x545 22.6 KB 说明:日期选择框大部分是不支持前端输入的,因为这个对象是 readOnly,只读属性,selenium ...
- C#执行JavaScript脚本代替Compute
DataTable.Compute不支持round之类的函数,可以调用JScript实现. 1.添加引用Microsoft.Vsa和Microsoft.JScript2.例子代码 object ret ...
随机推荐
- Advanced C++ | Conversion Operators
In C++, the programmer abstracts real world objects using classes as concrete types. Sometimes it is ...
- logrotate没有rotate的排查过程
前言 背景 xxx,你过来把squid的日志检查一下,是否做了日志切割:于是乎开启了logrotate没有切割日志的排查旅程,em--.只能说过程很爽,平时疲于应付繁琐的事情,难得有点时间能一条线慢慢 ...
- Windows下安装xampp的PHP扩展(redis为例)
(1)PHP的windowns扩展下载网址:https://windows.php.net/downloads/pecl/releases/ (2)Ctrl+f查询你要下载的扩展名 注意:扩展的版本要 ...
- 微信小程序项目使用npm安装vant-weapp的正确步骤,简单易懂!!
微信小程序项目使用npm安装vant-weapp的正确步骤 1.在当前小程序项目目录npm init -y 构建npm项目 2.运行命令 npm install vant-weapp -S --pro ...
- Sentinel-Go 源码系列(三)滑动时间窗口算法的工程实现
要说现在工程师最重要的能力,我觉得工程能力要排第一. 就算现在大厂面试经常要手撕算法,也是更偏向考查代码工程实现的能力,之前在群里看到这样的图片,就觉得很离谱. 算法与工程实现 在 Sentinel- ...
- LuoguP7127 「RdOI R1」一次函数(function) 题解
Content 设 \(S_k\) 为直线 \(f(x)=kx+k-1\),直线 \(f(x)=(k+1)x+k\) 与 \(x\) 轴围成的三角形的面积.现在给出 \(t\) 组询问,每组询问给定一 ...
- ASP.NET MVC 导入Excel文件(完整版)
View视图部分: <form method="post" enctype="multipart/form-data" action="/Pos ...
- Python软件目录结构
目录组织方式 关于如何组织一个较好的Python工程目录结构,已经有一些得到了共识的目录结构.在Stackoverflow的这个问题上,能看到大家对Python目录结构的讨论. 这里面说的已经很好了, ...
- 以太网/ IPV4/IPV6包头,TCP包头格式回顾
问题:以太网数据包,承载的数据内容大小46~1500字节,是如何来的? 以太网数据包结构 以太网协议规定最小链路层数据包(帧)为64字节,其中以太网首部+尾部共计18字节(源/目的MAC12字节:上 ...
- 用相对路径有时居然是这样,,加上<%=basePath%>
用相对路径有时居然是这样,所以还是用绝对路径好点,加上<%=basePath%> 比如create页面的action为ssh/pages/User/create,那么create页面的上的 ...