.Net C#执行JavaScript脚本

news/2024/7/7 19:45:01 标签: .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,可以为应用程序添加灵活性和可扩展性,并在应用程序中实现动态脚本执行功能。


http://www.niftyadmin.cn/n/5535131.html

相关文章

算法刷题笔记 双链表(C++实现)

文章目录 题目描述基本思路实现代码 题目描述 实现一个双链表&#xff0c;双链表初始为空&#xff0c;支持5种操作&#xff1a; 在最左侧插入一个数&#xff1b;在最右侧插入一个数&#xff1b;将第k个插入的数删除&#xff1b;在第k个插入的数左侧插入一个数&#xff1b;在第k…

嵌入式软件stm32面试

一、STM32的内核型号有哪些? STM32系列是STMicroelectronics(意法半导体)生产的基于ARM Cortex-M内核的微控制器产品线。这些产品按照不同的内核架构和性能特点分为了主流产品、超低功耗产品和高性能产品。 1.1 主流产品 STM32F0 系列:搭载 ARM Cortex-M0 内核。STM32F1 …

Java实现单点登录(SSO)详解:从理论到实践

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起进步&am…

leetcode216.组合总和III、40.组合总和II、39.组合总和

216.组合总和III 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺序返回。 示例 1: 输入: k 3, n 7 输出…

vue3中使用Antv G6渲染树形结构并支持节点增删改

写在前面 在一些管理系统中&#xff0c;会对组织架构、级联数据等做一些管理&#xff0c;你会怎么实现呢&#xff1f;在经过调研很多插件之后决定使用 Antv G6 实现&#xff0c;文档也比较清晰&#xff0c;看看怎么实现吧&#xff0c;先来看看效果图。点击在线体验 实现的功能…

Spring Cloud Alibaba之负载均衡组件Ribbon

一、什么是负载均衡&#xff1f; &#xff08;1&#xff09;概念&#xff1a; 在基于微服务架构开发的系统里&#xff0c;为了能够提升系统应对高并发的能力&#xff0c;开发人员通常会把具有相同业务功能的模块同时部署到多台的服务器中&#xff0c;并把访问业务功能的请求均…

如何通过IP地址查询地理位置及运营商信息

在数字时代&#xff0c;IP地址&#xff08;Internet Protocol Address&#xff0c;互联网协议地址&#xff09;已经成为我们日常网络活动的重要组成部分。每台连接到互联网的设备都被分配了一个唯一的IP地址&#xff0c;它不仅可以识别设备&#xff0c;还可以揭示设备的地理位置…

Perl 语言开发(三):运算符和表达式

目录 1. 算术运算符 1.1 基本算术运算符 1.2 自增和自减运算符 2. 字符串运算符 2.1 连接运算符 2.2 重复运算符 3. 赋值运算符 3.1 简单赋值运算符 3.2 复合赋值运算符 4. 比较运算符 4.1 数字比较运算符 4.2 字符串比较运算符 5. 逻辑运算符 5.1 逻辑运算符 5…