C# : 调用js

本文介绍如何使用ClearScript库在C#中执行JavaScript代码。通过多个示例演示了暴露C#类型、对象及程序集给JavaScript的方法,展示了创建C#对象、使用泛型类、调用方法、创建数组和委托等操作。
摘要由CSDN通过智能技术生成

C# 调用 js

Nuget

Microsoft.ClearScript

Github

https://github.com/Microsoft/ClearScript

例子

using System;

using Microsoft.ClearScript;
using Microsoft.ClearScript.JavaScript;
using Microsoft.ClearScript.V8;

namespace TestNet5
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            using var engine = new V8ScriptEngine();
            // 暴露 C# 类型         expose a host type
            engine.AddHostType("Console", typeof(Console));
            engine.Execute("Console.WriteLine('{0} is an interesting number.', Math.PI)");

            // 暴露 C# 对象         expose a host object
            engine.AddHostObject("random", new Random());
            engine.Execute("Console.WriteLine(random.NextDouble())");

            // 暴露 整个C#程序集       expose entire assemblies
            engine.AddHostObject("lib", new HostTypeCollection("mscorlib", "System.Core"));
            engine.Execute("Console.WriteLine(lib.System.DateTime.Now)");

            // 从脚本创建一个C#对象      create a host object from script
            engine.Execute(@"
                birthday = new lib.System.DateTime(2007, 5, 22);
                Console.WriteLine(birthday.ToLongDateString());
            ");

            // 使用脚本中的C#泛型类      use a generic class from script
            engine.Execute(@"
                Dictionary = lib.System.Collections.Generic.Dictionary;
                dict = new Dictionary(lib.System.String, lib.System.Int32);
                dict.Add('foo', 123);
            ");

            // 调用带有输出参数的C#方法        call a host method with an output parameter
            engine.AddHostObject("host", new HostFunctions());
            engine.Execute(@"
                intVar = host.newVar(lib.System.Int32);
                found = dict.TryGetValue('foo', intVar.out);
                Console.WriteLine('{0} {1}', found, intVar);
            ");

            // 创建并填充一个C#数组      create and populate a host array
            engine.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 delegate
            engine.Execute(@"
                Filter = lib.System.Func(lib.System.Int32, lib.System.Boolean);
                oddFilter = new Filter(function(value) {
                    return (value & 1) ? true : false;
                });
            ");

            // js使用LINQ            use LINQ from script
            engine.Execute(@"
                oddNumbers = numbers.Where(oddFilter);
                Console.WriteLine(lib.System.String.Join(', ', oddNumbers));
            ");

            // 使用动态C#对象         use a dynamic host object
            engine.Execute(@"
                expando = new lib.System.Dynamic.ExpandoObject();
                expando.foo = 123;
                expando.bar = 'qux';
                delete expando.foo;
            ");

            // 调用js函数           call a script function
            engine.Execute("function test(x) { Console.WriteLine(x); return x+'123456' }");
            var res = engine.Script.test("哈哈哈哈");
            Console.WriteLine(res); // 打印js 返回值

            // 获取js对象             examine a script object
            engine.Execute("person = { name: 'Fred', age: 5 }");
            Console.WriteLine(engine.Script.person.name);


            // 读取一个js类型的数组 read a JavaScript typed array
            engine.Execute("values = new Int32Array([1, 2, 3, 4, 5])");
            var values = (ITypedArray<int>)engine.Script.values;
            Console.WriteLine(string.Join(", ", values.ToArray()));

            Console.ReadLine();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值