매우 간만에 정리할만한 짓을 해서 정리중..
일단 url 부터..
1. Rhino : http://www.mozilla.org/rhino/
2. env.js : http://groups.google.com/group/envjs
일단 그냥 javascript 자체는 jdk 1.6 부터 ScriptManager 로 그냥 실행 시킬 수 있다. 아래같이 걍 쓰면 된다.
import javax.script.*;
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
engine.eval("print(1+3);");
그런데 문제점은 기존의 코드를 그대로 돌릴 수 없다는 점. 가장 문제는 window 객체도 없고 document 도 없다. 물론, html 영역도 없으므로 기존의 코드가 브라우저의 내장 객체들을 사용하면 그 코드는 돌아가지 않는다.
그런 객체들을 만들어주는 코드가 바로 env.js 이다. 순수 자바스크립트로 이루어져있는 이 코드는 window 객체부터, document 객체는 물론이고, dom 객체들의 innerHTML 같은 속성까지 구현해놓았다.
그럼 ScriptManager 에 env.js 를 넣고 실행한 후 하면 될 것 같다. 하지만 문제는 또 있다. env.js 는 ScriptManager 가 제공하는 자바스크립트 스펙만으로는 동작하지 않는다. env.js 에는 getter, setter 같은 것이 구현되어 있는데, 그건 ECMA-262 Edition 4 부터 지원되는 것 같다. 아무튼 그냥 jdk 1.6 안에 있는 걸루는 안되니 rhino 를 따로 받아서 해야한다.
env.js 나 js-14.jar 나 그냥 url 로 들어가서 받아도 된다.
아무튼 jar 를 자바빌드패스를 설정해서 넣어주고, 다음과 같이 하면 된다.
import org.mozilla.javascript.Context;
import org.mozilla.javascript.ContextFactory;
import org.mozilla.javascript.Scriptable;
ContextFactory factory = ContextFactory.getGlobal();
Context cx = factory.enterContext();
cx.setOptimizationLevel(-1);// without 64kb limit
Scriptable shared = cx.initStandardObjects();
Scriptable scope = cx.newObject(shared);
cx.evaluateReader(scope, new java.io.FileReader("env.rhino.js"), "", 1, null);
String source ="";
source += "var div = document.createElement(\"div\");";
source += "div.innerHTML = \"korea\";";
source += "document.body.appendChild(div);";
source += "document.body.innerHTML;";
Object result = cx.evaluateString(scope, source, "", 1, null);
System.out.println(result);//"<div>korea</div>"
룰루랄라.. 너무 잘된다. 응용이 매우 가능할듯.
'javascript' 카테고리의 다른 글
iPhone Safari 브라우저 기능 레퍼런스 및 뷰포트 설정. (0) | 2010.04.20 |
---|---|
env.js 사용시 부족한 부분 수정 (0) | 2010.04.20 |
What is false in javascript? (0) | 2009.01.16 |
apply Style Sheet rules (0) | 2008.12.01 |
javascript 막코딩으로 flip 효과 시도 (뒤집는 효과) (0) | 2008.11.18 |