C#和JS交互之Microsoft.ClearScript.V8(V8引擎)

之前测试了很多JS引擎,都只支持es5语法,不支持执行es6,测试了下微软的V8反正能跑通,应该是支持的。还得是微软呀。

如图:安装相关包:
在这里插入图片描述
这是参考的官方V8代码

using Microsoft.ClearScript.JavaScript;
using Microsoft.ClearScript.V8;
using Microsoft.ClearScript;
using System.Security.Cryptography;using (var engine = new V8ScriptEngine()){// 指定JavaScript文件路径string filePath = @"D:\test\CallJS\CallJS\test.js";// 读取JavaScript文件内容string javascriptCode = File.ReadAllText(filePath);// expose a host typeengine.Execute("var window = this;");engine.AddHostType("Console", typeof(Console));var type = "mp3";var mid = 440613;var para = $"corp=kuwo&p2p=1&type=convert_url2&sig=0&format={type}&rid={mid}";string str = "Console.WriteLine(encryptQuery('112233'))";string str1 = "Console.WriteLine(encryptQuery('para'))".Replace("para", para);engine.Execute(javascriptCode + C#有偿群:927860652);engine.Execute(javascriptCode + str1);engine.Execute("Console.WriteLine('{0} is an interesting number.', Math.PI)");// expose a host objectengine.AddHostObject("random", new Random());engine.Execute("Console.WriteLine(random.NextDouble())");// expose entire assembliesengine.AddHostObject("lib", new HostTypeCollection("mscorlib", "System.Core"));engine.Execute("Console.WriteLine(lib.System.DateTime.Now)");// create a host object from scriptengine.Execute(@"birthday = new lib.System.DateTime(2007, 5, 22);Console.WriteLine(birthday.ToLongDateString());");// use a generic class from scriptengine.Execute(@"Dictionary = lib.System.Collections.Generic.Dictionary;dict = new Dictionary(lib.System.String, lib.System.Int32);dict.Add('foo', 123);");// call a host method with an output parameterengine.AddHostObject("host", new HostFunctions());engine.Execute(@"intVar = host.newVar(lib.System.Int32);found = dict.TryGetValue('foo', intVar.out);Console.WriteLine('{0} {1}', found, intVar);");// create and populate a host arrayengine.Execute(@"numbers = host.newArr(lib.System.Int32, 20);for (var i = 0; i < numbers.Length; i++) { numbers[i] = i; }Console.WriteLine(lib.System.String.Join(', ', numbers));");// create a script delegateengine.Execute(@"Filter = lib.System.Func(lib.System.Int32, lib.System.Boolean);oddFilter = new Filter(function(value) {return (value & 1) ? true : false;});");// use LINQ from scriptengine.Execute(@"oddNumbers = numbers.Where(oddFilter);Console.WriteLine(lib.System.String.Join(', ', oddNumbers));");// use a dynamic host objectengine.Execute(@"expando = new lib.System.Dynamic.ExpandoObject();expando.foo = 123;expando.bar = 'qux';delete expando.foo;");// call a script functionengine.Execute("function print(x) { Console.WriteLine(x); }");engine.Script.print(DateTime.Now.DayOfWeek);// examine a script objectengine.Execute("person = { name: 'Fred', age: 5 }");Console.WriteLine(engine.Script.person.name);// read a JavaScript typed arrayengine.Execute("values = new Int32Array([1, 2, 3, 4, 5])");var values = (ITypedArray<int>)engine.Script.values;Console.WriteLine(string.Join(", ", values.ToArray()));}

稍微看下官网案例,就知道怎么用了。

再记录下es6转es5步骤:

1.npm执行以下命令:
npm install -g babel-cli 安装babel

2.查看版本 babel --version

3.初始化项目
执行npm init -y

4.安装转换包 npm install --save-dev babel-preset-es2015

5.转为新es5语法文件 babel src -d dist

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
记得把要转换的文件放在项目根目录,我把js文件放在根目录下的src文件夹中,然后创建.babelrc配置文件在根目录中
内容如下:

{"presets": ["es2015"],"plugins": []
}

在这里插入图片描述

然后会在根目录生成新的dist文件夹,es5版本的JS在里面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/101298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

当下测试行业中UI自动化面临的难点及如何解决

经常有人会问&#xff0c;什么样的项目才适合进行UI自动化测试呢&#xff1f;UI自动化测试相当于模拟手工测试&#xff0c;通过程序去操作页面上的控件。而在实际测试过程中&#xff0c;经常会遇到无法找到控件&#xff0c;或者因控件定义变更而带来的维护成本等问题。 哪些场…

jvm--执行引擎

文章目录 1. 执行引擎的工作流程2. 解释器、JIT及时编译器3. 热点代码及探测技术4. HotSpotVM 中 JIT 分类 执行引擎属于 JVM 的下层&#xff0c;里面包括解释器、及时编译器、垃圾回收器 JVM 的主要任务是负责 装载字节码到其内部&#xff0c;但字节码并不能够直接运行在操作…

Zookeeper分布式一致性协议ZAB源码剖析

文章目录 1、ZAB协议介绍2、消息广播 1、ZAB协议介绍 ZAB 协议全称&#xff1a;Zookeeper Atomic Broadcast&#xff08;Zookeeper 原子广播协议&#xff09;。 Zookeeper 是一个为分布式应用提供高效且可靠的分布式协调服务。在解决分布式一致性方面&#xff0c;Zookeeper 并…

Docker 的网络与数据管理

Docker 网络实现原理 Docker使用Linux桥接&#xff0c;在宿主机虚拟一个Docker容器网桥(docker0)&#xff0c;Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址&#xff0c;称为Container-IP&#xff0c;同时Docker网桥是每个容器的默认网关。因为在同一宿主机…

栈的模拟实现(Java)

目录 1、 栈的概念2、栈的使用3、栈的模拟实现 1、 栈的概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last I…

Linux 部署1Panel 现代化运维管理面板进行公网远程访问

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《速学数据结构》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透2.1 使用一键脚本安装命令 2.2向系统添加服务2.3 启动cpolar服务…

爬虫Python

文章目录 基本数据类型bytes类型python数据类型转换&#xff08;必会&#xff01;&#xff01;&#xff01;&#xff09; python运算符&#xff08;必会&#xff01;&#xff01;&#xff01;&#xff09;python数字数学函数&#xff08;必会&#xff01;&#xff01;&#xff…

uni-app:实现view元素强制换行(解决长字符和英文字符不换行问题)

效果 换行前 换行后 核心代码 word-wrap: break-word; 或 word-break: break-all; 完整代码demo <template><view><view class"all_style"><view class"line1">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</view>…

ubuntu离线编译安装cmake 3.22.5(could not fonud OPENSSL) and cmake-versinon查不到版本问题

1、首先去cmake官网下载压缩包,例如: cmake-3.22.5.tar.gz 2、拉到ubuntu进行解压: tar -zxcf cmake-3.22.5.tar.gz 3、cd 进入目录 cd cmake-3.22.5 4、执行configure可执行文件 ./configure 如果在编译过程中出现报错:Could NOT findOpenSSL,原因可能是缺少ssl库 按…

独享IP地址的层级划分和管理:打造稳定高效的网络架构

在网络架构设计中&#xff0c;独享地址的层级划分和管理是一项关键任务。它不仅能提供更好的网络性能和安全性&#xff0c;还能帮助企业实现更高效的资源管理。本文将为您详细介绍独享地址的层级划分和管理的重要性&#xff0c;并提供具体的方案和实际操作建议。 第一部分&…

高压放大器在纳米材料中的应用有哪些

高压放大器是一种重要的电子设备&#xff0c;可以用于增强输入信号的电压。在纳米材料领域&#xff0c;高压放大器也具有广泛的应用。下面西安安泰将介绍高压放大器在纳米材料中的应用&#xff0c;并探讨其可行性和潜在的研究方向。 纳米材料传感器&#xff1a;高压放大器在纳米…

10月11日,每日信息差

今天是2023年10月11日&#xff0c;以下是为您准备的16条信息差 第一、SHEIN在广州投资百亿的湾区供应链项目提速。该湾区供应链项目将建设集运营仓储、备货、拣货、分拨、发货等为一体的供应链仓储物流中心 第二、国内首条碳化法荧光级氧化镁中试生产线在青海建成。据了解&am…

大数据面试题:Spark和Flink的区别

面试题来源&#xff1a; 《大数据面试题 V4.0》 大数据面试题V3.0&#xff0c;523道题&#xff0c;679页&#xff0c;46w字 可回答&#xff1a;1&#xff09;Spark Streaming和Flink的区别 问过的一些公司&#xff1a;杰创智能科技(2022.11)&#xff0c;阿里蚂蚁(2022.11)&…

微服务10-Sentinel中的隔离和降级

文章目录 降级和隔离1.Feign整合Sentinel来完成降级1.2总结 2.线程隔离两种实现方式的区别3.线程隔离中的舱壁模式3.2总结 4.熔断降级5.熔断策略&#xff08;根据异常比例或者异常数&#xff09; 回顾 我们的限流——>目的&#xff1a;在并发请求的情况下服务出现故障&…

【踩坑】hive脚本笛卡尔积严重降低查询效率问题

前一阵子查看我们公司的大数据平台的离线脚本运行情况, 结果发现有一个任务居然跑了一天多, 要知道这还只是几千万量级的表, 且这个任务是每天需要执行的 于是我把hive脚本捞出来看了下, 发现无非多join了几个复杂的子查询, 应该不至于这么久, 包括我又检查了是不是没有加上每…

MTK平台闪光灯相关信息

&#xff08;1&#xff09;概念 MTK打闪一般分为预闪、主闪两个阶段。相应的执行一次拍照会有预闪、主闪两次开灯。预闪可以用来防红眼(red-eye reduction)。闪光时使环境发生变化&#xff0c;会按新的光线条件&#xff08;有闪光时&#xff09;重新测光&#xff0c;来实现更精…

python- excel 创建/写入/删sheet+花式遍历

文章目录 前言python- excel 创建/写入/删sheet花式遍历1. excel 创建2. 写入excel3. 创建写入excel demo实战4. 删除sheet5. excel 花式遍历 demo实战5.1. 获取 A1的值5.2. 获取指定列的切片数据&#xff0c;获取 B1到B5的值5.3. 循环整个excel的这个sheet5.4. 遍历指定行&…

从零开始学习:如何使用Selenium和Python进行自动化测试?

安装selenium 打开命令控制符输入&#xff1a;pip install -U selenium 火狐浏览器安装firebug&#xff1a;www.firebug.com&#xff0c;调试所有网站语言&#xff0c;调试功能 Selenium IDE 是嵌入到Firefox 浏览器中的一个插件&#xff0c;实现简单的浏览器操 作的录制与回…

【C++ techniques】Reference counting(引用计数)

Reference counting的两个技术动机&#xff1a; 为了简化heap objects周边的簿记工作&#xff0c;当对象运用了引用计数技术&#xff0c;一旦不再有任何人使用它&#xff0c;它便自动销毁自己&#xff0c;也因此&#xff0c;reference counting建构出垃圾回收机制的一个简单形…

Unity2017适配安卓12

测试版本为Unity2017.4.25f1 1.在自定义AndroidManifest.xml&#xff08;位于Assets\Plugins\Android\&#xff09;中添加android:exported"true" <?xml version"1.0" encoding"utf-8"?> <manifestxmlns:android"http://schema…