如果我使用 Jint 引擎在 JavaScript 代码中定义一个 .Net 类会发生什么
What happens if I define a .Net class in JavaScript code using Jint engine
在 Jint 中,您可以在 JS 中访问 .Net 类。
JS文件代码:
var write = function (msg) {
var log = System.Console.WriteLine;
log(msg);
};
C# 代码
Engine jsEngine = new Engine(e=>e.AllowClr());
string script = System.IO.File.ReadAllText("file1.js");
jsEngine.Execute(script);
jsEngine.Invoke("write", "Hello World!"); //Displays in Console: "Hello World!"
- 我不明白后台发生了什么?哪个编译器将在JS文件中编译注入的c#代码?C# 编译器还是 JS?
- 如果我在 JS 文件中声明了 C# 列表,生成的对象是 JS 对象还是 C# 对象?
您没有注入 C# 代码,Jint 解释器将理解您引用的是 .NET 类,因此执行此代码。因为Jint是用.NET编写的,所以它可以运行你要求的任何.NET代码。
此外,Jint 不会编译任何东西,它会读取每个 javascript 语句并尝试一个接一个地评估它们,跟踪您正在声明和使用的所有变量、函数和其他 JS 工件。
让我们逐步完成调用调用:
- jsEngine.Invoke 导致 Jint 在 JavaScript 中执行 write 方法,并传入"Hello World!
- write方法调用System.Console.WriteLine,此时Jint从JavaScript转换回托管代码并调用该方法。
现在回答您的问题:
- 不会注入任何代码。代码仅从托管到脚本(解释)转换为托管执行。
- 如果在 JS 中创建 C# List 对象,则该对象是真正的托管 .Net 对象。
相关文章:
- 如何在只能有一个asp.net表单的主页上从asp.net页面中的javascript中获取值
- 让ASP.NET中继器设置一个动态名称
- ASP.NET angularjs重定向到控制器的另一个视图
- 使用javascript asp.net将listbox数据传输到另一个listbox
- 在重定向到 ASP.NET C# 中的另一个页面之前显示客户端脚本警报
- Asp.net 引导下拉菜单 - 选择一个项目
- 如何使用 asp.net 中的另一个下拉列表更改下拉列表选定的索引和可见性
- ASP.NET引用了一个javascript函数
- jquery专注于asp.net mvc部分视图中的一个文本框
- 使用Html.BeginFrom在ASP.Net MVC中提交一个带有锚(<a>)标记且具有一定值的表单
- ASP.Net电子邮件有一个超链接应该在新窗口中打开
- 在asp.net的一个页面上有多个CKEDITOR
- 使用数据寻呼机在 asp.net 分页 - 下一个,上一个按钮
- 如何创建一个在JavaScript中使用的C#.Net DLL
- 如何记住asp.net中最后一个被调用的JavaScript函数
- 如何使用JavaScript对asp.net中基于另一个文本框的文本框进行验证
- 创建一个类似datatables.net的表示例,其中包含parent/child和+/-响应按钮
- 使用一个按钮ASP.NET MVC提交多个单选按钮值
- 设置一个下拉填充到它's的值和文本在AngularJS和asp.net webApi中的编辑模式
- 如果我使用 Jint 引擎在 JavaScript 代码中定义一个 .Net 类会发生什么