2

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コードの読み込み方法を教えてください。


もう 1 つの質問 - Json オブジェクトを Java コードから Javascript 関数にパラメーターとして渡す方法は?


http://www.envjs.com/dist/env.rhino.1.2.js
http://code.jquery.com/jquery-1.9.0.min.js

4

2 に答える 2

1

Envjs ガイド ( http://www.envjs.com/doc/guides#running-embed ) の手順を使用して、Rhino でこれを行う方が簡単な場合があります。

import org.mozilla.javascript.Context;
import org.mozilla.javascript.ContextFactory;
import org.mozilla.javascript.tools.shell.Global;
import org.mozilla.javascript.tools.shell.Main;
...
Context cx = ContextFactory.getGlobal().enterContext();
cx.setOptimizationLevel(-1);
cx.setLanguageVersion(Context.VERSION_1_5);
Global global = Main.getGlobal();
global.init(cx);
Main.processSource(cx, "path/to/your/EnvJSfile");
Main.processSource(cx, "path/to/your/JQueryJSfile");
cx.evaluateString(global, "your JavaScript", "JavaScript", 1, null);
于 2014-06-09T06:45:37.063 に答える