我正在尝试从 Java 执行 Javascript 代码。Javascript 代码使用 jquery,所以我在我的代码之前添加了 jquery.js。但它会引发以下异常,
Exception in thread "main" javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "window" is not defined. (<Unknown source>#1) in <Unknown source> at line number 1
当我从 Java 代码运行它时,我知道它无权访问窗口对象,所以上面的异常。我发现 EnvJs 提供了所需环境的实现,所以我尝试通过将其内容放在首位来加载它,同时将脚本内容生成到 eval。但遇到以下异常,
Exception in thread "main" javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot call property getCurrentContext in object [JavaPackage org.mozilla.javascript.Context]. It is not a function, it is "object". (<Unknown source>#1247) in <Unknown source> at line number 1247
以下是代码片段,
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
String script = "Envjs code" + "jQuery code" + "my java script"; //code of envjs + jquery from the link provided at the end
engine.eval(script);
Invocable inv = (Invocable) engine;
inv.invokeFunction("myFunc", obj1, obj2);
我不使用任何浏览器功能,因此不需要对象之类的窗口。所以理想情况下我不想加载Envjs。请让我知道如何加载 jQuery 代码。
还有一个问题 - 如何将 Java 代码中的 Json 对象作为参数传递给 Javascript 函数?
http://www.envjs.com/dist/env.rhino.1.2.js
http://code.jquery.com/jquery-1.9.0.min.js