首页 > 编程语言 >.net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript

.net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript

时间:2024-06-07 17:00:12浏览次数:19  
标签:engine core string javascript js result str using net

.net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript

我项目里需要用到“文字编码”,为了保证前端和后端的编码解码不处bug,

所以,我在项目中用了这个

下面推荐之前在.net F4.0时的方法

文章一:

c# 解码 js的escape_c# escape-CSDN博客

文章二:

c#对js的encodeURI() 编码 decodeURI()解码 escape() 编码unescape()解码,decodeURIComponent() ,encodeURICompon加密解密_c# encodeuricomponent-CSDN博客

管理Nuget程序包

选中项目》依赖项》右键》管理Nuget程序包》浏览》

搜索:Microsoft.ClearScript

Microsoft.ClearScript

Microsoft.ClearScript介绍

地址:NuGet Gallery | Microsoft.ClearScript 7.4.5

项目地址:GitHub - microsoft/ClearScript: A library for adding scripting to .NET applications. Supports V8 (Windows, Linux, macOS) and JScript/VBScript (Windows).

API文档:

ClearScript Library Reference

使用说明:

ClearScript FAQtorial

使用说明

源码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.ClearScript.JavaScript;
using Microsoft.ClearScript.V8;

namespace TestCode
{
    public class ClearScriptCore
    {
        public static void Exe()
        {

            using (var engine = new V8ScriptEngine())
            {
                string str = "你好";
                string jsFunName = "escape";
                string result = engine.Invoke(jsFunName, str).ToString(); //只能调用全局方法
                Console.WriteLine($"str:{str}\n\r jsFunName:{jsFunName}\n\r result:{result}");
                str = result;
                jsFunName = "unescape";
                string result2 = engine.Invoke(jsFunName, str).ToString();
                Console.WriteLine($"str:{str}\n\r jsFunName:{jsFunName}\n\r result2:{result2}");
            }
        }
    }
}

增加引用

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

代码实现和测试

using (var engine = new V8ScriptEngine())
{
 string str = "你好";
 string jsFunName = "escape";
 string result = engine.Invoke(jsFunName, str).ToString(); //只能调用全局方法
 Console.WriteLine($"str:{str}\n\r jsFunName:{jsFunName}\n\r result:{result}");
 str = result;
 jsFunName = "unescape";
 string result2 = engine.Invoke(jsFunName, str).ToString();
 Console.WriteLine($"str:{str}\n\r jsFunName:{jsFunName}\n\r result2:{result2}");
}

运行结果

str:你好
 jsFunName:escape
 result:%u4F60%u597D

str:%u4F60%u597D
 jsFunName:unescape
 result2:你好

代码封装

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using JinianNet.JNTemplate;
using Microsoft.ClearScript.V8;

namespace JJY.Cheng
{
    public class JavaScriptHelper
    {
        /// <summary>
        /// escape编码
        /// </summary>
        /// <param name="val"></param>
        /// <returns></returns>
        public static string escape(string val)
        {
            string result = "";
            if (string.IsNullOrWhiteSpace(val))
            {
                result = "";
            }
            else
            {
                using (var engine = new V8ScriptEngine())
                { 
                    result = engine.Invoke("escape", val).ToString();
                }
            } 
            return result;
        }
        /// <summary>
        /// unescape解码
        /// </summary>
        /// <param name="val"></param>
        /// <returns></returns>
        public static string unescape(string val)
        {
            string result = "";
            if (string.IsNullOrWhiteSpace(val))
            {
                result = "";
            }
            else
            {
                using (var engine = new V8ScriptEngine())
                {
                    result = engine.Invoke("unescape", val).ToString();
                }
            }
            return result;
        }
    }
}


延伸阅读

 C# / .NET Core 调用javascript方法(适用于Windows/Linux平台) 有很好的示例代码

下面内容来自:

https://www.cnblogs.com/shanyou/p/13837007.html

引入Nuget包,Microsoft.ClearScript

demo.js(原生javascript)

function m(t, e, r) {
    p(v(t))
}

引入Nuget包,Microsoft.ClearScript

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

初始化

using (var engine = new V8ScriptEngine())
{
    engine.DocumentSettings.AccessFlags = Microsoft.ClearScript.DocumentAccessFlags.EnableFileLoading;
    engine.DefaultAccess = Microsoft.ClearScript.ScriptAccess.Full; // 这两行是为了允许加载js文件
    // do something
}

调用脚本有多种方案。

方案一:

调用engine.ComplieDocument方法直接加载js文件,然后调用engine.Execute将引入的脚本执行一遍,这样后面就可以调用js方法,m就是js的方法名,调用格式与js相同。

V8Script script = engine.CompileDocument(ScriptFilePath);   // 载入并编译js文件, 然后Execute, 就可以直接调用。
engine.Execute(script);
var result = engine.Script.m("SHAURCOnewayduew&^%5d54nc'KH"); 

方案二:

将要导入的js方法的代码读出来,然后执行一遍,再调用要执行的js方法

string scriptContent = string.Empty;
using(FileStream fs = new FileStream(ScriptFilePath, FileMode.Open, FileAccess.Read))
{
    using(StreamReader sr = new StreamReader(fs))
    {
        scriptContent = sr.ReadToEnd().Replace("\r\n", "");
    }
}
engine.Execute(scriptContent);  // 取得脚本里的所有内容,Execute一下,然后,调用engine.Script.func(x,y)执行一下。

var result = engine.Script.m("SHAURCOnewayduew&^%5d54nc'KH");

直接调用执行

直接调用执行调用的方法的js代码也是可以的

string scriptContent = string.Empty;
using(FileStream fs = new FileStream(ScriptFilePath, FileMode.Open, FileAccess.Read))
{
    using(StreamReader sr = new StreamReader(fs))
    {
        scriptContent = sr.ReadToEnd().Replace("\r\n", "");
    }
}
scriptContent += "m(\"SHAURCOnewayduew&^%5d54nc'KH\");";  // 在js代码的结尾加上执行的代码

engine.Execute(scriptContent);  // 取得脚本里的所有内容,Execute一下,然后,调用engine.Script.func(x,y)执行一下。

var result = engine.Script.m("SHAURCOnewayduew&^%5d54nc'KH");

调用js的默认方法

特殊情况,调用js全局方法,就是调用js的默认的那些方法

var result = engine.Invoke("encodeURIComponent", "SHAURCOnewayduew&^%5d54nc'KH"); //只能调用全局方法,如encodeURIComponen

上文中用的就是这个方法

标签:engine,core,string,javascript,js,result,str,using,net
From: https://blog.csdn.net/cplvfx/article/details/139524632

相关文章

  • ControlNet++:让AI图像生成更精准、更可控
     在人工智能的世界里,文本到图像的生成技术正变得越来越先进。但如何确保生成的图像精确地反映我们的想象呢?最近,一项名为ControlNet++的新技术为我们提供了答案。ControlNet++是一种新颖的方法,它通过优化生成图像与给定条件之间的像素级循环一致性,显著提高了文本到图像生成的......
  • 在 Windows 7 中安装 .NET Framework 时遇到错误:无法建立到信任根颁发机构的证书链
    当全新安装Windows7SP1后,在未安装任何补丁,也未进行联网的状态下,安装.NETFramework4.6/4.7或更高的版本时,应该会遇到错误提示:无法建立到信任根颁发机构的证书链。解决方法1.下载证书地址:https://download.csdn.net/download/LongtengGensSupreme/894078272.开始→运行......
  • CronetDynamite.apk 中的奇怪崩溃(偏移量 0x1000) Android
    我的应用程序在2021年2月1日出现崩溃报告。崩溃LGELGPremierPro安卓9(SDK28)Playstore控制台崩溃已在CronetDynamite.apk中报告了40次backtrace:......
  • 美团面试:说说Netty的零拷贝技术?
    零拷贝技术(Zero-Copy)是一个大家耳熟能详的技术名词了,它主要用于提升IO(Input&Output)的传输性能。那么问题来了,为什么零拷贝技术能提升IO性能?1.零拷贝技术和性能在传统的IO操作中,当我们需要读取并传输数据时,我们需要在用户态(用户空间)和内核态(内核空间)中进行数据拷贝,它的执......
  • Telnet发邮件的功能如何实现?有哪些限制?
    Telnet发邮件有哪些步骤?使用Telnet发送邮件安全吗?虽然大多数人使用图形化的电子邮件客户端发送和接收邮件,但了解如何通过Telnet发邮件依然是有益的。AokSend将详细介绍Telnet发邮件的功能如何实现,帮助读者掌握这种基础但有用的技能。Telnet发邮件:优势特点可以用于测试和调......
  • CorelDRAW 全称“CorelDRAW Graphics Suite
    箭头在各种场景中被广泛使用。在设计中,设计师可以根据设计的目的和受众,巧妙地运用箭头来传达信息、创造视觉效果或引导观者的注意力。在CDR软件中可以为设计添加箭头,那具体该怎么做呢?下面由我带大家一起来了解CoreIDRAW箭头形状工具在哪里,CoreIDRAW箭头形状怎么改成曲线的相关......
  • 螺旋转动,矩阵的舞蹈:JavaScript中实现螺旋矩阵遍历算法
    螺旋转动,矩阵的舞蹈:JavaScript中实现螺旋矩阵遍历算法基础概念:什么是螺旋矩阵?核心算法解析示例一:基础螺旋矩阵遍历算法解析进阶技巧示例二:动态生成螺旋矩阵技巧点实战与性能优化问题与解决:大矩阵处理结语与讨论在编程的奇幻世界里,数组与矩阵是构筑数字城堡的基石......
  • 数组大扫雷行动:JavaScript中的高效移除指定元素
    数组大扫雷行动:JavaScript中的高效移除指定元素基本概念:移除元素,何为?方法一:splice()大法方法二:filter()轻功功能使用角度与技巧案例一:简单移除案例二:条件移除实战分析遇到的坑与对策结语与讨论在JavaScript编程的征途中,数组是我们的常伴,而“移除元素”这一任务,则像......
  • ASP.NET Core MVC 练习项目
    目录一、开发环境二、项目搭建2.1创建ASP.NETMVC项目2.2导入相关程序包2.3创建模型类、数据库上下文2.4配置连接数据库、配置数据库上下文、注册数据库上下文2.5数据迁移、添加初始数据三、业务实现3.1新建接口类文件夹IService,并在文件夹中创建IGetService接......
  • ASP.NET Core MVC 接上篇新增加“增删改查”操作
    前言由于上一篇文章只写了怎么创建项目以及一个查询操作,这篇文章将把增删改查的操作补齐,希望能帮助到一同学习的小伙伴,内容中如有不懂的点,可参考ASP.NETCore官方文档,如有写的不对的,请在评论区补充,主打听劝;增删改查接口类publicinterfaceIGetService<T>whereT:cl......