2013-04-20 2 views
2

Я пытаюсь выполнить код Javascript с Java. Javascript-код использует jquery, поэтому я добавляю jquery.js перед моим кодом. Но он бросает следующее исключение,Позвоните javascript (jQuery/Envjs) из java-кода

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.


Еще один вопрос - Как передать Json Object из Java-кода в функцию Javascript в качестве параметра?


http://www.envjs.com/dist/env.rhino.1.2.js

ответ

0

не известно о Envjs, но почему моделировать среду браузера в Java?

второго вопроса:

ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript"); 
Compilable compilable = (Compilable) engine; 
Bindings bindings = engine.createBindings(); 
String script = "function add(op1,op2){return op1+op2} add(a, b)"; 
CompiledScript jsFunction = compilable.compile(script); 
bindings.put("a", 1);bindings.put("b", 2); //put java object into js runtime environment 
Object result = jsFunction.eval(bindings); 
System.out.println(result); 

вы можете поместить любой объект в переплетах, карта, список или Pojo.

1

Это может быть проще сделать с Rhino, используя инструкции из руководства Envjs (http://www.envjs.com/doc/guides#running-embed).

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); 
Смежные вопросы