当前位置: 首页 > news >正文

.Net C#执行JavaScript脚本

文章目录

  • 前言
  • 一、安装
  • 二、执行 JavaScript 脚本
  • 三、与脚本交互
  • 四、JS 调用 C# 方法
  • 五、多线程使用
  • 总结


前言

    ClearScript 是一个 .NET 平台下的开源库,用于在 C# 和其他 .NET 语言中执行脚本代码。它提供了一种方便和安全的方法来将脚本与应用程序集成,并允许将应用程序暴露给脚本以进行更高级别的自定义和交互。


一、安装

二、执行 JavaScript 脚本

using var engine = new V8ScriptEngine();
engine.Execute("var a = 10; var b = 20; var c = a + b;");
var result = engine.Script.c;
Console.WriteLine(result); // 输出 30

三、与脚本交互

    在执行 JavaScript 脚本时,可以将 C# 对象传递给脚本,以便脚本可以访问这些对象。要将对象传递给脚本,需要使用 AddHostObject() 方法将对象添加到 JavaScript 引擎中。

/// <summary>
/// Person类需要为Public,V8引擎才能正常访问
/// </summary>
public class Person
{public string? Name { get; set; }public int Age { get; set; }
}/// <summary>
/// JS与C#交互
/// </summary>
static void InteractionBetweenJsAndCsharp()
{using var engine = new V8ScriptEngine();var person = new Person { Name = "沙漠尽头的狼", Age = 18 };engine.AddHostObject("person", person);engine.Execute("var c = person.Name + ' 才 ' + person.Age + ' 岁呀?';");var result = engine.Script.c;Console.WriteLine(result); // 沙漠尽头的狼 才 18 岁呀?
}

四、JS 调用 C# 方法

    除了将 C# 对象传递给 JavaScript 外,还可以在 JavaScript 中调用 C# 方法。要在 JavaScript 中调用 C# 方法,需要创建一个包含方法的类,并使用 AddHostObject() 方法将该类添加到 JavaScript 引擎中。

/// <summary>
/// JS调用C#的方法
/// </summary>
static void JsCallCSharpMethod()
{using var engine = new V8ScriptEngine();var calculator = new Calculator();engine.AddHostObject("calculator", calculator);engine.Execute("var result = calculator.Add(15, 20)");var result = engine.Script.result;Console.WriteLine(result); // 35
}public class Calculator
{public int Add(int a, int b){return a + b;}
}

五、多线程使用

    ClearScript 还支持在多个线程中使用 JavaScript 引擎。要在多个线程中使用 JavaScript 引擎,需要创建多个 JavaScript 引擎实例,并使用各自的线程来执行脚本。

using System.Threading.Tasks;
using Microsoft.ClearScript.V8;var engine1 = new V8ScriptEngine();
var engine2 = new V8ScriptEngine();Task.Run(() =>
{engine1.Execute("var a = 'Hello from thread 1!'");
});Task.Run(() =>
{engine2.Execute("var b = 'Hello from thread 2!'");
});

总结

    本文介绍了 ClearScript 的使用方法和特点,包括如何在 C# 中执行 JavaScript 脚本、如何与脚本交互、如何调用 C# 方法、多线程使用等方面的内容。ClearScript 提供了一种方便和安全的方法来将脚本与应用程序集成,并允许将应用程序暴露给脚本以进行更高级别的自定义和交互。通过使用 ClearScript,可以为应用程序添加灵活性和可扩展性,并在应用程序中实现动态脚本执行功能。

相关文章:

.Net C#执行JavaScript脚本

文章目录 前言一、安装二、执行 JavaScript 脚本三、与脚本交互四、JS 调用 C# 方法五、多线程使用总结 前言 ClearScript 是一个 .NET 平台下的开源库&#xff0c;用于在 C# 和其他 .NET 语言中执行脚本代码。它提供了一种方便和安全的方法来将脚本与应用程序集成&#xff0c;…...

企业应对策略:全面防御.DevicData-P-xxxxxx勒索病毒

引言 在数字化时代&#xff0c;网络安全已成为不可忽视的重要议题。随着互联网的普及&#xff0c;各种网络威胁层出不穷&#xff0c;其中勒索病毒以其独特的攻击方式和巨大的破坏性&#xff0c;给个人用户和企业带来了严重的经济损失和数据安全风险。在众多勒索病毒中&#xff…...

记一次mysql导出到达梦数据库

DM8管理工具 DM管理工具&#xff08;官方&#xff09;DBeaver - jdbc驱动 MySql迁移到DM8 使用官方DM数据迁移工具 新建迁移工程选择MySQL>DM填写mysql连接信息、添加dm连接信息执行 DM8数据脚本制作过程 使用DM管理工具 导出全部&#xff1a;进入对应模式>表>选…...

2024年高压电工证考试题库及高压电工试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年高压电工证考试题库及高压电工试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大纲随机出的高压…...

完美解决ImportError: cannot import name ‘idnadata‘的正确解决方法,亲测有效!!!

完美解决ImportError: cannot import name idnadata’的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 亲测有效 完美解决ImportError: cannot import name idnadata的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01;报错问题…...

完美解决windows开机时,系统提示此windows副本不是正版的正确解决方法,亲测有效!!!

完美解决windows开机时&#xff0c;系统提示此windows副本不是正版的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 亲测有效 完美解决windows开机时&#xff0c;系统提示此windows副本不是正版的正确解决方法&#xff0c;亲测有效&#xff01;&#…...

树莓派采集系统

树莓派&#xff08;Raspberry Pi&#xff09;是一款非常受欢迎的小型单板计算机&#xff0c;因其低成本、低功耗以及丰富的I/O接口&#xff0c;非常适合用来搭建数据采集系统。无论是环境监测、智能家居、工业自动化&#xff0c;还是科学实验&#xff0c;树莓派都能胜任。以下是…...

ListView

效果图 1、在activity_main.xml中创建ListView&#xff0c;再创建list_item.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match…...

gptoolbox matlab工具箱cmake 调试笔记

一、问题描述 起因&#xff1a;在matlab中运行Offset surface of triangle mesh in matlab的时候报错&#xff1a; 不支持将脚本 signed_distance 作为函数执行: E:\MATLAB_File\gptoolbox\mex\signed_distance.m> 出错 offset_bunny (第 22 行) D signed_distance(BC,V,F…...

Python面试题:请编写一个函数,计算一个字符串中每个字符的出现频率

当然&#xff0c;可以通过使用 Python 编写一个函数来计算字符串中每个字符的出现频率。下面是一个示例函数&#xff1a; def char_frequency(s):"""计算字符串中每个字符的出现频率参数:s (str): 输入字符串返回:dict: 一个字典&#xff0c;其中键是字符&…...

MacOS如何切换shell类型

切换 shell 类型 如果你想在不同的 shell 之间切换&#xff0c;以探索它们的不同之处&#xff0c;或者因为你知道自己需要其中的一个或另一个&#xff0c;可以使用如下命令&#xff1a; 切换到 bash chsh -s $(which bash)切换到 zsh chsh -s $(which zsh)$()语法的作用是运…...

Qt QSettings 使用详解:跨平台的配置管理

文章目录 Qt QSettings 使用详解:跨平台的配置管理一、QSettings 概述1. QSettings 的基本使用二、不同平台上的实现1. Windows 平台注册表存储INI 文件存储2. Linux 平台3. macOS 平台三、QSettings 高级用法1. 使用组管理设置2. 检查和移除设置3. 枚举键四、总结Qt QSetting…...

确定适合您需求的负载组

大多数关键任务行业都使用 UPS 和发电机等备用电源在停电期间为其设施提供持续电力。负载组允许您在需要时测试电源&#xff0c;以确保在您最需要的时候提供可靠的电力。 选择正确的负载组对于准确的电源测试至关重要。为了帮助您找到最适合您设施需求的负载组&#xff0c;EAK…...

Xubuntu24.04之设置高性能模式两种方式(二百六十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP…...

【自适应滤波系列五】基于LMS算法的回声消除(Acoustic Echo Cancellation, AEC)

自适应滤波算法的思想,在上一篇博客中已经进行了详细的描述,本文主要谈谈自适应滤波算法的其中之一LMS算法在回声消除中的应用。 LMS算法由来和思想 在自适应滤波中,基于信号的统计特性构造代价函数 E [ ∣ e ( n ) ∣ 2 ] E\left[|e(n)|^2 \right] E...

matlab 卷积和多项式乘法

目录 一、算法原理1、原理概述2、主要函数二、代码实现1、通过卷积计算多项式乘法2、向量卷积3、卷积的中心部分三、参考链接一、算法原理 1、原理概述 两个向量 u u u和 v v v的卷积,表示...

数据跨境传输法规日趋完善,企业如何规避合规风险?

随着全球化的发展&#xff0c;跨境数据传输变得日益频繁。在数字化时代&#xff0c;数据安全是企业运营的关键。数据跨境传输由于涉及不同国家和地区&#xff0c;其安全合规性面临着更大的风险和挑战。 2022年&#xff0c;国家网信办发布了《数据出境安全评估办法》&#xff08…...

工业机床CNC设备如何上云?

工业机床CNC设备如何上云&#xff1f; 工业机床的计算机数控&#xff08;CNC&#xff09;设备实现远程监控数据上云&#xff0c;是现代制造业智能化转型的关键一环。这一过程不仅能够实时监测设备状态、优化生产流程&#xff0c;还能通过大数据分析提升生产效率与产品质量&…...

Android C++系列:Linux进程间关系

1. 终端 在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进 程的控制终端(Controlling Terminal),在前面文章我们说过,控制终端是保存在PCB中的信 息,而我们知道fork会复制PCB中的信息,因此由Shell进程启动的其它进程的控制终端也是 这个终端。…...

使用bypy丝滑传递百度网盘-服务器文件

前言 还在为百度网盘的数据集难以给服务器做同步而痛苦吗&#xff0c;bypy来拯救你了&#xff01;bypy是一个强大而灵活的百度网盘命令行客户端工具。它是基于Python开发的开源项目&#xff0c;为用户提供了一种通过命令行界面与百度网盘进行交互的方式。使用bypy&#xff0c;…...

从零构建开发者效率工具:CLI脚手架与自动化工作流实践

1. 项目概述与核心价值最近在开源社区里&#xff0c;一个名为smouj/smouj的项目引起了我的注意。乍一看这个标题&#xff0c;可能会让人有些摸不着头脑&#xff0c;它不像常见的vue/vue或tensorflow/tensorflow那样直白地揭示了其技术栈。但恰恰是这种看似“神秘”的命名&#…...

Markdown元数据自动化管理:mdac-filler工具核心功能与实战指南

1. 项目概述&#xff1a;一个为Markdown文档自动填充元数据的工具如果你经常用Markdown写文档、博客或者项目README&#xff0c;肯定遇到过这样的场景&#xff1a;每次新建一个文件&#xff0c;都得手动去文件头部敲一堆“Front Matter”元数据&#xff0c;比如标题、日期、标签…...

大模型Agent面试通关秘籍!小白程序员必备,附收藏版学习资源

大模型Agent面试通关秘籍&#xff01;小白程序员必备&#xff0c;附收藏版学习资源 本文分享了作者在阿里巴巴大模型Agent应用算法岗面试中的真实经验&#xff0c;涵盖了从一面到三面的高频技术问题及答题思路&#xff0c;包括大模型Agent核心模块解析、微调与提示工程关系、Ag…...

为什么你的Ziatype输出总是发灰?3分钟定位CMYK→RGB色域坍缩根源并一键修复

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Ziatype印相发灰现象的直观诊断与认知重构 Ziatype是一种基于铁-银工艺的古典摄影印相法&#xff0c;其典型特征是高对比度、深沉黑位与细腻中间调。然而在实际操作中&#xff0c;“发灰”&#xff08;…...

AI智能体文化档案:用Next.js静态站点构建数字人类学观察站

1. 项目概述&#xff1a;一个观察AI智能体文化的数字档案馆最近在GitHub上闲逛&#xff0c;发现了一个让我眼前一亮的项目&#xff1a;The MoltStein Files。这可不是一个普通的代码仓库&#xff0c;而是一个专注于记录和存档AI智能体之间“社交”行为的数字档案馆。简单来说&a…...

告别网盘限速困扰:网盘直链下载助手全面解析与应用指南

告别网盘限速困扰&#xff1a;网盘直链下载助手全面解析与应用指南 【免费下载链接】baiduyun 油猴脚本 - 一个免费开源的网盘下载助手 项目地址: https://gitcode.com/gh_mirrors/ba/baiduyun 还在为网盘下载速度缓慢而烦恼吗&#xff1f;网盘直链下载助手作为一款免费…...

保姆级避坑指南:用GGCNN源码处理Cornell抓取数据集,解决tiff文件生成失败问题

GGCNN源码实战&#xff1a;Cornell数据集预处理深度排错指南 第一次运行GGCNN的Cornell数据集预处理脚本时&#xff0c;我盯着毫无反应的终端窗口足足等了十分钟——没有进度条&#xff0c;没有错误提示&#xff0c;只有光标在无情地闪烁。这大概是每个复现论文的开发者都会经历…...

ARM动态内存控制器与SDRAM地址映射技术详解

1. ARM动态内存控制器基础解析动态内存控制器&#xff08;Dynamic Memory Controller&#xff0c;简称DMC&#xff09;是现代嵌入式系统中管理SDRAM等易失性存储器的核心组件。作为处理器与存储设备之间的桥梁&#xff0c;DMC通过高效的地址映射技术实现两者间的数据通信。在AR…...

自治性、反应性、学习能力:AI Agent的关键特性

自治性、反应性、学习能力:AI Agent的关键特性——从蚂蚁觅食到通用智能体的进化之路 关键词 AI Agent, 自治性, 反应性, 强化学习, 记忆机制, 环境交互, 通用人工智能萌芽 摘要 想象一下:你有一个能自己帮你规划周末露营路线(自治性)、中途遇到暴雨自动切换到附近民宿…...

LVGL列表控件实战:5分钟搞定一个带图标和事件响应的菜单界面

LVGL列表控件实战&#xff1a;5分钟打造高交互性嵌入式菜单界面 在嵌入式设备的人机交互设计中&#xff0c;菜单界面是最基础也最关键的组件之一。想象一下&#xff0c;当你需要为智能家居控制面板设计一个简洁明了的操作菜单&#xff0c;或者为工业设备开发一个功能选择界面时…...