2011-09-29 1 views
1

rhino1_7R2를 사용하고 있습니다. 나는 다음과 같은 프로그램이 구문 오류 (불법으로 형성된 XML 구문) 원인 것으로 나타났습니다 :Rhino E4X는 {expression}에서 xml 리터럴을 허용하지 않습니다.

function b(node) { 
    return <span>{node}{node}</span>; 
} 
a=<span>foo {b(<div>bar</div>)} baz</span>; 
alert(a); 

을하지만 그것은 작동 : 그 코뿔소는 {식}에서 litral XML을 허용하지 않습니다에

function b(node) { 
    return <span>{node}{node}</span>; 
} 
var bar=<div>bar</div>; 
a=<span>foo {b(bar)} baz</span>; 
alert(a); 

것 같다. 처음에는 ECMAScript 사양이 이것을 금지한다고 생각했습니다. 그러나 Firefox (3.6.23)에서는이 구문을 사용할 수 있습니다. 따라서 ECMA 사양이 아닐 수 있습니다.

이 테스트 페이지가 파이어 폭스에서 실행 (그것은 작동) :

<script> 
    function b(node) { 
     return <span>{node}{node}</span>; 
    } 
    a=<span>foo {b(<div>bar</div>)} baz</span>; 
    alert(a); 
</script> 

사람은 그것이 말할 수 Rhino의 버그 코뿔소 또는 ECMA 스크립트 중 하나의 사양 때문에?

Java/Rhino에 테스트 코드를 첨부하겠습니다. 문안 인사.

import org.mozilla.javascript.Context; 
import org.mozilla.javascript.ScriptableObject; 


public class Main { 
    public static void main(String[] args) { 
     Context c=Context.enter(); 
     ScriptableObject scope = c.initStandardObjects(); 
     String source_OK = 
       "function b(node) { " + 
       " return <span>{node}{node}</span>;" + 
       "}" + 
       "var bar=<div>bar</div>;" + 
       "a=<span>foo {b(bar)} baz</span>; "; 
     Object a=c.evaluateString(scope, source_OK, "TEST", 1, null); 
     System.out.println(a); 

     String source_NG = 
      "function b(node) { " + 
      " return <span>{node}{node}</span>;" + 
      "}" + 
      "a=<span>foo {b(<div>bar</div>)} baz</span>; "; 
     a=c.evaluateString(scope, source_NG, "TEST", 1, null); //Error! 
     System.out.println(a); 
     Context.exit(); 
    } 
} 

답변

관련 문제