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

.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:escaperesult:%u4F60%u597Dstr:%u4F60%u597DjsFunName:unescaperesult2:你好

代码封装

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

上文中用的就是这个方法

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

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

相关文章

操作系统真象还原:中断

第7章-中断 这是一个网站有所有小节的代码实现&#xff0c;同时也包含了Bochs等文件 7.2操作系统是中断驱动的 没有中断&#xff0c;操作系统几乎什么都做不了&#xff0c;操作系统是中断驱动。 7.3中断分类 7.3.1外部中断 外部中断是指来自 CPU 外部的中断&#xff0c;而…

Python基础教程(八):迭代器与生成器编程

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

时隔很久运行苍穹外卖项目,出现很多错误

中途运行了很多其他项目&#xff0c;maven的配置文件还被我修改了一次。导致再次运行苍穹外卖项目出现很多错误。 发现没有办法&#xff0c;把本地的仓库删了个干干净净。然后点击clean发现报错&#xff1a; Cannot access alimaven (http://mavejavascript:void(0);n.aliyun.…

力扣每日一题 6/10

881.救生艇[中等] 题目&#xff1a; 给定数组 people 。people[i]表示第 i 个人的体重 &#xff0c;船的数量不限&#xff0c;每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人&#xff0c;但条件是这些人的重量之和最多为 limit。 返回 承载所有人所需的最小船…

Vue15-watch对比计算属性

一、姓名案例 1-1、watch实现 1-2、计算属性 对比发现&#xff1a; 计算属性比watch属性更简略一些。 1-3、计算属性 VS 侦听属性 1-4、需求变更 计算属性中不能开启异步任务&#xff01;&#xff01;&#xff01;因为计算属性靠return返回值。但是watch靠亲自写代码去改。 1-…

streamlit:如何快速构建一个应用,不会前端也能写出好看的界面

通过本文你可以了解到&#xff1a; 如何安装streamlit&#xff0c;运行起来第一个demo熟悉streamlit的基本语法&#xff0c;常用的一些组件使用streamlit库构建应用 大模型学习参考&#xff1a; 大模型学习资料整理&#xff1a;如何从0到1学习大模型&#xff0c;搭建个人或企业…

设计模式之观察者模式ObserverPattern(十一)

一、概述 观察者模式 (Observer Pattern) 是一种行为型设计模式&#xff0c;又被称为发布-订阅 (Publish/Subscribe) 模式&#xff0c;它定义了对象之间的一种一对多的依赖关系&#xff0c;使得当一个对象的状态发生变化时&#xff0c;所有依赖于它的对象都会自动收到通知并更新…

Duck Bro的第512天创作纪念日

Tips&#xff1a;发布的文章将会展示至 里程碑专区 &#xff0c;也可以在 专区 内查看其他创作者的纪念日文章 我的创作纪念日第512天 文章目录 我的创作纪念日第512天一、与CSDN平台的相遇1. 为什么在CSDN这个平台进行创作&#xff1f;2. 创作这些文章是为了赚钱吗&#xff1f…

手写kNN算法的实现-用欧几里德空间来度量距离

kNN的算法思路&#xff1a;找K个离预测点最近的点&#xff0c;然后让它们进行投票决定预测点的类型。 step 1: kNN存储样本点的特征数据和标签数据step 2: 计算预测点到所有样本点的距离&#xff0c;关于这个距离&#xff0c;我们用欧几里德距离来度量&#xff08;其实还有很多…

ui自动化中,selenium进行元素定位,以及CSS,xpath定位总结

几种定位方式 简单代码 from selenium import webdriver import time# 创建浏览器驱动对象 from selenium.webdriver.common.by import Bydriver webdriver.Chrome() # 参数写浏览器驱动文件的路径&#xff0c;若配置到环境变量就不用写了 # 访问网址 driver.get…

WPF-UI布局

WPF布局元素有如下几个&#xff1a; Grid&#xff1a;网格。可以自定义行和列并通过行列的数量、行高和列宽来调整控件的布局。StackPanel&#xff1a;栈式面板。可将包含的元素在竖直或水平方向上排成一条直线&#xff0c;当移除一个元素后&#xff0c;后面的元素会自动向前移…

两台电脑通过网线直连共享数据(超详细)- 我的实践记录

原文链接 按照原文的操作&#xff0c;成功通过直连网线连接了两台windows电脑并共享传输数据。 ping不通可能是防火墙没关闭导致的&#xff0c;但是完全关闭防火墙又不安全。 那么有没有不关闭防火墙&#xff0c;能够上网&#xff0c;又能直连另一台电脑呢&#xff1f; 我们…

Linux启动KKfileview文件在线浏览时报错:启动office组件失败,请检查office组件是否可用

目录 1、导论 2、报错信息 3、问题分析 4、解决方法 4.1、下载 4.2、安装步骤 1、导论 今天进行项目部署时&#xff0c;遇到了一个问题。在启动kkfileview时&#xff0c;出现了报错异常&#xff1a; 2024-06-09 06:36:44.765 ERROR 1 --- [ main] cn.keking.service.Of…

全球溃败,苹果可能要全球大降价了,试图摆脱中国制造的后果

苹果一季度在中国市场的出货量暴跌&#xff0c;导致它不得不在中国市场大降价&#xff0c;从3月份就在中国市场大幅度降价&#xff0c;然而目前它在美国和欧洲两大市场也出现大幅衰退&#xff0c;降价可能将成为苹果在全球的举措。 市调机构Canalys公布的一季度数据显示&#x…

Warning: `ReactDOMTestUtils.act` is deprecated in favor of `React.act`.

问题&#xff1a;在代码中使用jest进行单元测试时&#xff0c;报错如下&#xff1a; 解决思路&#xff1a; 根据报错提示出来的 react-dom/test-utils 进行全局搜索&#xff0c;发现没有该引用&#xff0c;故进入该代码块中分析。发现代码中引入testing-library/react &#…

Git使用总结(git使用,git实操,git命令和常用指令)

简介&#xff1a;Git是一款代码版本管理工具&#xff0c;可以记录每次提交的代码&#xff0c;防止代码丢失&#xff0c;可实现版本迭代&#xff0c;解决代码冲突&#xff0c;常用的远程Git仓库&#xff1a;Gitee&#xff08;国内&#xff09;、GitHub&#xff08;国外&#xff…

基于websocket与node搭建简易聊天室

一、前言 上一篇文章介绍了websocket的详细用法与工具类的封装&#xff0c;本篇就基于websocket搭建一个简易实时的聊天室。 在本篇开始之前也可以去回顾一下websocket详细用法&#xff1a;WebSocket详解与封装工具类 二、基于node搭建后台websocket服务 首先确认本机电脑中…

【debug】vscode配置c/c++环境及查看调试信息m1 mac

之前用的一直是clion 但是经过反复调整&#xff0c;发现始终查看不了vector里面的数值&#xff08;只有指针地址&#xff09;&#xff0c;改用常用的vscode后调试成功 安装 安装vscode 以及vscode中的扩展安装 c/c,c/c extension pack,cmake,cmake tools,code runner,codeLLD…

HarmonyOS(二十三)——HTTP请求实战一个可切换的头条列表

在前一篇文章&#xff0c;我们已经知道如何实现一个http请求的完整流程&#xff0c;今天就用官方列子实战一个简单的新闻列表。进一步掌握ArkTS的声明式开发范式&#xff0c;数据请求&#xff0c;常用系统组件以及touch事件的使用。 主要包含以下功能&#xff1a; 数据请求。…

盘点2024年5月Sui生态发展,了解Sui近期成长历程!

2024年5月是Sui的第一个生日月&#xff0c;Sui迎来了它的上线一周年纪念日。在过去的一年中Sui在技术进步与创新、生态系统的扩展、社区发展与合作伙伴关系以及重大项目和应用推出方面取得重要进展&#xff0c;展示了其作为下一代区块链平台的潜力。 以下是Sui的近期成长历程集…