我正在尝试编写一个同构模块。服务器 javascript 将在 JINT 内部运行。我专门创建了一个 webpack 包来构建模块的服务器版本。我想公开一个可以让 JINT 调用的函数。我正在使用 JINT 的 scriptEngine.Invoke 函数,但是这是在全局对象上寻找函数。我不知道如何将函数放到全局对象上。我曾尝试使用公开加载程序,但这似乎导出了整个模块,我无法让它只公开一个函数。
这是我的切入点:
require("expose?FormValidator!./formValidator.js");
Run Code Online (Sandbox Code Playgroud)
这是我的 formValidator.js:
export default function validate () {
return 'HelloWorld';
}
Run Code Online (Sandbox Code Playgroud)
当我加载结果包并检查 FormValidator 全局时,它是一个带有验证函数的对象。有没有办法让验证函数直接分配给 FormValidator?
我有一个 .NET Generic Dictionary<>,我想将它传递给我在 Jint 中运行的 JavaScript 函数。
Jint 不会将 .NET Dictionary 视为可以像 Dictionary 一样对待的 JavaScript 对象。您可以访问对象上的 .NET 属性和方法,但不能访问扩展方法。
因此,虽然我可以获得字典键的数量,但我无法枚举它或对其调用 ToArray()。
我可以使用 dict[key] 从字典中读取值,但在这种情况下,我事先不知道键。
如何枚举键或获取 .NET 通用字典中的所有条目?
我愿意在字典中做一些事情或在我传递它之前转换它或弄清楚如何在 JavaScript 中做它。我宁愿不必单独传递一组键。这是在另一个数据结构中,对每个字典执行此操作会使其更加复杂,但如果找不到其他解决方案,这是我正在考虑的选项之一。
我宁愿远离使用动态。我在过去大量使用它们时遇到了内存泄漏的问题。
我正在寻找一种在 JInt(C# Unity 的 javascript 解释器)中本地包含另一个 js 文件的方法。我知道我可以简单地将所有 js 文件连接到一个字符串并通过正常方式运行它。但我不想指定要加载的确切文件以及文件加载顺序。我在文件夹和子文件夹中有未定义数量的文件,我只知道哪个文件是 main.js。
是否有可能使用 nodejs 中的 require('file.js') 之类的东西,或者这完全是个坏主意?
谢谢你。
PS 这个项目打算在 Unity-JInt 下运行。
我正在尝试使用 Jint (v2.10.4.0) 将一个任意 JSON 结构转换为另一种结构。但是,我在使用map时遇到问题。
根据 ECMA 5.1 语言规范,map应该存在于 Array.prototye 上。但是,当我尝试使用它时,出现错误:Jint.Runtime.JavaScriptException: 'Object has no method 'map''
我正在测试这个
Engine engine = new Engine();
var doubles = engine.SetValue("x", "[ 1, 2, 3, 4, 5 ]")
.Execute("x.map(function(a){ return a + a; })")
.GetCompletionValue()
.ToObject();
Console.WriteLine(doubles);
Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)
理想情况下,我还想使用 find,尽管这是 ECMA6。我在使用 Array.Prototype.map 时缺少什么吗?或者有没有办法为 Jint 引入 polyfill?
假设我有一个这样的 Java 类:
public class Test
{
static { System.loadLibrary("test"); }
public native int foo();
}
Run Code Online (Sandbox Code Playgroud)
假设 foo() 方法正在执行一些 JNI 调用,并且其中一个调用失败(IE,抛出异常)。然后我想从 JNI 代码返回并在 Java 中抛出异常。例如:
jint Java_Test_foo(JNIEnv* env, jobject thiz)
{
jstring foobar = (*env)->NewStringUTF(env, "Hello from JNI !");
if(foobar == NULL) // Not enough memory. OutOfMemoryError is thrown
return NULL; // Return immediately to get exception thrown in Java
// Do other stuff
...
return some_computed_jint;
}
Run Code Online (Sandbox Code Playgroud)
问题是这return NULL不是一个吉特。例如,在 Android 中,我在编译时会收到此警告:
warning: return Makes Integer from Pointer …
我正在尝试构建一个使用为 JavaScript 制作的 API 的应用程序。它不是发送 JSON 或 XML,而是发送一个带有 JavaScript 对象的 Script 标签,如下所示:
<script>
var apiresult = {
success: true,
data: {
userName: "xxxxx",
jsonData: {
"id" : "8342859",
"price" : "83.94"
}
}
};
</script>
Run Code Online (Sandbox Code Playgroud)
我试图摆脱“jsonData”属性。在浏览器领域,你可以去:
apiresult.data.jsonData;
Run Code Online (Sandbox Code Playgroud)
显然我不能在 C# 中做到这一点。我试过像这样使用 Jint 和 HtmlAgilityPack:
HtmlDocument = await client.GetHTMLAsync(url);
string scriptTag = htmlResult.DocumentNode.SelectNodes("//script").InnerHtml;
scriptTag += " return apiresult.data.jsonData;
JintEngine engine = new JintEngine();
Jint.Native.JsObject r = (Jint.Native.JsObject)engine.Run(scriptTag);
Run Code Online (Sandbox Code Playgroud)
如果我在观察窗口中展开“r.Results”,它会显示变量值,但是我如何只获取原始 JSON 以便我可以将其解析为我的对象?
我有这个 JavaScript 文件:
var input = {
"CONTRATE": 0,
"SALINC": 0,
"RETAGE": 55.34,
"MARSTATUS": "single",
"SPOUSEDOB": "1970-01-01",
"VIEWOPTION": "pension"
};
var inputValidation = "input.CONTRATE > 50 && input.SALINC < 50 && input.RETAGE > 50";
eval(inputValidation);
Run Code Online (Sandbox Code Playgroud)
如何使用 JINT 作为 JSON 对象字符串获取“输入”变量的 JSON 值?
我是的新手JINT,并且尝试做一些基本的测试来学习绳索。我的第一个尝试是将一些JavaScript存储在我的数据库中,加载它,然后在单元测试中执行它。所以基本上看起来像这样。
[Fact]
public void can_use_jint_engine() {
using (var database = DocumentStore()) {
using (var session = database.OpenSession()) {
var source = session.Load<Statistic>("statistics/1");
// join the list of strings into a single script
var script = String.Join("\n", source.Scripting);
// this will create the script
// console.log("this is a test from jint.");
//
var engine = new Jint.Engine();
// attempt to execute the script
engine.Execute(script);
}
}
}
Run Code Online (Sandbox Code Playgroud)
而且它不起作用,我收到此错误,这对我来说绝对没有意义,而且我也找不到任何文档。
未在_testing_installer.cs的SampleProject.Installers.Instanced .__ testing_installer.can_use_jint_engine()的Jint.Engine.Execute(字符串源)的Jint.Engine.Execute(程序程序)处定义Jint.Runtime.JavaScriptExceptionconsole:第318行
任何人都可以协助减轻一些压力吗?在这一点上我很困惑。
jint ×8
c# ×6
javascript ×4
android-ndk ×1
dictionary ×1
ecmascript-5 ×1
exception ×1
json ×1
webpack ×1