#javascript #rhino #e4x
#javascript #rhino #e4x
Вопрос:
Я использую rhino1_7R2. Я обнаружил, что следующая программа вызывает синтаксическую ошибку (незаконно сформированный синтаксис XML):
function b(node) {
return <span>{node}{node}</span>;
}
a=<span>foo {b(<div>bar</div>)} baz</span>;
alert(a);
но это работает:
function b(node) {
return <span>{node}{node}</span>;
}
var bar=<div>bar</div>;
a=<span>foo {b(bar)} baz</span>;
alert(a);
Похоже, что Rhino не допускает литеральный xml в {expression }.
Сначала я подумал, что спецификация ECMAScript запрещает это.
Но в Firefox (3.6.23) разрешен этот синтаксис. Так что это может быть не из-за спецификации ECMA.
Это тестовая страница, запущенная в Firefox (она работает):
<script>
function b(node) {
return <span>{node}{node}</span>;
}
a=<span>foo {b(<div>bar</div>)} baz</span>;
alert(a);
</script>
Может ли кто-нибудь сказать, что это связано с ошибкой Rhino или спецификациями Rhino или Ecmascript?
Я приложу тестовый код на 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();
}
}
Ответ №1:
Извините, я обнаружил, что это ошибка Rhino самостоятельно:
https://bugzilla.mozilla.org/show_bug.cgi?id=323890
Я также отправил исправление для этой ошибки.