2010-04-18 5 views
0

Protovis 자바에서 자바 스크립트를 실행하고 평가 된 SVG 코드를 가져오고 싶습니다. 내가 javax.script의를 사용하고 * 자바 스크립트를 실행하려면 :. 내가 Protovis 자체를로드하지 않기 때문에javax.script에서 자바 스크립트 라이브러리로드 중

public static void EvalScript() throws Exception { 
    ScriptEngineManager factory = new ScriptEngineManager(); 
    ScriptEngine engine = factory.getEngineByName("JavaScript"); 
    Object result = engine.eval("var vis = new pv.Panel().width(300).height(300) 
     .add (pv.Line).data ([1,0.5, 0.1, 0.01, 0.001, 0.3, 0.2,0.1,1]) 
      .left (function() { return this.index * 30; }) 
      .bottom (function (d) { return d * 250; }); 
     vis.root.render(); 
     vis.scene[0].canvas.innerHTML;");   
    System.out.println(result); 
} 

이 불평 것, 일반적으로

<script type="text/javascript" src="../protovis-r3.1.0.js"></script> 

와 함께 할 것처럼 있나요 좋은 방법을 짧은 javax.script를 통해 Javascript를 실행할 때 라이브러리를로드하는 eval() 명령에 전체 Javascript를 소싱하는 방법?

답변

1

그럼 왜 전체 스크립트를로드하지 않고 eval()에게 건네 줍니까? Javascript 실행 컨텍스트가 라이브러리를 구문 분석하고 해석하도록하려면 뭔가이 필요합니다. 물론 스크립트 컨텍스트에 메커니즘을 제공하여 스크립트 자체에서 제공 한 <script> 태그 예제와 동일한 작업을 수행 할 수 있지만 결국 똑같은 결과가 발생합니다.

Rhino에 대한 귀하의 의견을 이해할 수 없습니다. JDK 1.6 의 자바 스크립트 인터프리터는입니다.

+0

감사합니다. 나는 이것을 원하지 않는다. 그냥 FileReader를 열고 eval에 전달하는 것보다 더 좋은 방법이 있는지 궁금합니다. Rhino 주석을 삭제했습니다. 참조 용으로 링크를 포함하고 싶었지만 Rhino라고 알고 있습니다. – Shane

+0

좋아, 그럼 좋았어. 필자가 과거에해온 방법은 두 가지 트릭을 모두 제공하는 것입니다. 앱의 일반적인 서비스로 각 Javascript 환경에 몇 가지 표준 라이브러리를 "설치"했습니다. 그런 다음 Javascript 측면에서 유틸리티 라이브러리를로드 할 수 있도록 몇 가지 API를 연결했습니다. (나는 웹 애플 리케이션에서 일하고 있었기 때문에 로딩은 항상 "getResourceAsStream"을 통해 이루어졌지만 파일이나 PATH로부터의 로딩은 본질적으로 같을 것이다.) Javascript-domain 후크를 제공하는 것은 라이브러리가 많거나 적다면 좋다. 유틸리티 패키지. – Pointy

관련 문제