问题标签 [jint]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - Jint.Parser.JavaScriptParser:区分顶级标识符
我正在尝试使用 .js 检测 JavaScript 代码片段引用的所有全局变量Jint.Parser.JavaScriptParser
。我通过遵循此问题中的代码示例来检索令牌列表,然后删除任何已声明函数的名称,如下所示:
这适用于简单的原始变量,但是当引用作为对象的全局变量时,解析器还将这些对象的成员返回为 type Identifier
。这是正确的,但我需要区分顶级标识符和其他类型的标识符,但据我所知,没有办法做到这一点。有人有聪明的解决方法吗?
c# - 如何评估 JSON 文件中的日期时间表达式?
我有如下的 Json 文件:
/li>想在 c# 中使用 JINT 在 json Key "Rules" 之上运行:
/li>出现错误“未定义日期时间”。如果有人可以帮助我理解是否可以使用 JINT 在 JSON 中使用 DateTime 对象,这将很有帮助
javascript - Jint(.NET javascript 解析器)总是返回 ExpandoObject
我尝试为游戏编写模组。这对我来说是全新的领域,所以我可能在这里走错了路。游戏是用 Unity 编写的,您可以将 .script 文件添加到您的 mod。.script 文件可以包含由 Jint 解析的 javascript。
我试图从一个游戏 DLL 中输出一个简单的字符串:
在 GameMain.dll 中它说:
我的理解是 GameMain.Game.ModPath 应该给我一个字符串。但是日志文件中的输出是这样的:
无论我尝试输出什么,我都会得到一个 System.Dynamic.ExpandoObject 并且不知道如何处理它。也许有人可以给我提示/资源来帮助。:)
c# - GetCompletionValue with IIFE trigger errors
I get a exception if I try to use GetCompletionValue
with Invoker
.
How can i execute the run
function with IIFE lexical scope?
Javascript:
My Invoker:
Error:
c# - 静态类 JINT 中的 C# 非静态类
嗨,试图在静态类中创建一个类以在 JINT 中使用,但是当它被引用时,我得到一个错误
C# 代码
但是当我尝试在 JavaScript 中创建一个新的时,我从 JINT 收到一个错误“对象不能用作构造函数”
我这样做对吗?如何设置 C# 以便能够在 JINT 的 JavaScript 中使用上述代码?
顺便说一句,如果“Ok”不是一个静态类,而是一个命名空间,它可以工作,但我希望它作为一个类,因为我也想在其中包含静态方法
javascript - Jint:在 Javascript 函数中使用 CLR 对象的属性
我一直在测试 jint 库并遇到了障碍。给定 C# 中的这个类:
而这段代码:
我收到错误:'Jint.Runtime.JavaScriptException:'对象没有方法'startsWith'''
但是,这有效:
那么我可以让前者工作吗?
javascript - 使用 Jint 从 C# 返回的 Javascript 访问 JSON 数组项
我正在尝试使用 Jint 在 C# 和 Javascript 之间来回通信。基本上一帆风顺,但是我无法在我的 JS 脚本中访问从 C# 返回的数组中的项目。访问返回对象的属性可以正常工作,但访问数组项总是返回 null。
下面是我设置 Jint 引擎并执行我的 Javascript 的 C# 代码。
我正在执行的 Javascript 如下所示:
注意:我意识到我可以从 C# 返回一个字符串,然后从 Javascript 调用 JSON.parse(...),但我试图避免额外的步骤。
很感谢任何形式的帮助。谢谢你。
javascript - 使用 JInt 解析和评估复杂对象
我需要评估某些表达式,并根据评估选择下一步。我正在尝试为此使用 JInt javscript 解释器。
对于来自 json 的基本评估,它工作正常。但是当我试图在数组上添加额外的操作时,问题就来了。
我的方法,为基础对象设置值 => 编写一个函数来评估表达式 => 调用这个函数并将表达式传递给评估 => 函数将使用 eval 来评估传递的字符串。初始对象已在前面的步骤中设置。
像这样的东西,
在此, inputStart 是我已经使用设置的基础对象
engine.SetValue("inputStart", JsonConvert.DeserializeObject(inputStart));
inputStart 是 json 文本。小提琴也有字符串供参考。最后是函数,
此代码工作正常。现在的变化是,我有另一个包含数组的 json 文本。我正在尝试使用过滤器或查找来定位特定的数组项,然后对其进行一些操作。像这样的东西,
这给了我以下错误,
未处理的异常。System.ArgumentException:使用无效键值访问的 JArray 值:“过滤器”。预期为 Int32 数组索引。
我的完整程序供参考,
这是我正在尝试做的完整小提琴,https://dotnetfiddle.net/GtamM8
如果有人遇到过这样的问题,或者可以提出解决方案,那将非常有帮助。
javascript - 当应用程序作为 64 位应用程序运行时,JINT 性能明显变差
该应用程序需要 JS 支持(程序是用 C# 编写的)并且 JINT 被用作解释器。我注意到当应用程序作为 64 位应用程序运行时性能会显着降低。
我已将其简化为以下示例,该示例说明了该问题:
当它被编译为 32 位应用程序时,大约需要 11 秒。当它被编译为 64 位应用程序时,大约需要 35 秒。请在实际应用程序中经常抛出异常。
有谁知道为什么会这样?
请注意,这只是在调试器下运行时出现的问题。在调试器之外,性能似乎相似。
更新#1
我一直在研究这个,现在有这个例子:
运行 32 位应用程序时,这比构建为 64 位应用程序时快 20-30%。
即使这样做:
因此,如果没有 .NET 回调,它在 64 位模式下仍然慢 10-20%。
有人知道为什么吗?
更新#2
此示例显示了 32 位和 64 位进程之间的速度差异。我使用 benchmarkdotnet.org 来显示差异。
该脚本已全部注释掉,并且正在执行中。64 位进程大约慢 30%。脚本是否被解析似乎没有什么区别。
有谁知道为什么会这样?