2013-04-20 2 views
2

Java에서 Javascript 코드를 실행하려고합니다. Javascript 코드는 jquery를 사용하므로 내 코드 앞에 jquery.js를 추가합니다. 그러나 나는 자바 코드에서 이것을 실행, 나는 예외 위 있도록 창 개체에 액세스 할 수없는 것을 이해Java 코드에서 javascript (jQuery/Envjs) 호출

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 

, 다음과 같은 예외가 발생합니다. 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 Object를 매개 변수로 전달하는 방법


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

답변

0

는 Envjs에 대해 알려져 있지만 왜 자바 브라우저 환경을 시뮬레이션 할 수 있습니까? 두 번째 질문에 대한

:

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

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);