我在Android上使用env.rhino.js成功阅读了其他人的报告。我还让犀牛在Android应用程序中正常工作并执行简单的脚本,在Java和JavaScript之间传递参数。但是,当我尝试使用env.rhino.js时,无论我找到和使用哪个版本的envJs,无论哪个rhino(尝试过rhino1_7R2,rhino1_7R5和rhino1_7R5pre),我都会得到一个StackOverflowError。基于活动的类中的代码是:
public void envjsTest() {
String envJs = convertAssetToString("env.rhino.js");
Context cx = ContextFactory.getGlobal().enterContext();
cx.setOptimizationLevel(-1);
cx.setLanguageVersion(Context.VERSION_1_8);
try {
Scriptable scope = cx.initStandardObjects();
cx.evaluateString(scope, envJs, "env.rhino.js", 1, null);
} finally {
Context.exit();
}
}
尝试了不同的VERSION设置,没有任何帮助。我得到的堆栈跟踪是:
01-18 14:27:18.389: ERROR/AndroidRuntime(2447): FATAL EXCEPTION: main
java.lang.StackOverflowError
at org.mozilla.javascript.Decompiler.appendString(Decompiler.java:208)
at org.mozilla.javascript.Decompiler.addName(Decompiler.java:121)
at org.mozilla.javascript.IRFactory.transformName(IRFactory.java:811)
at org.mozilla.javascript.IRFactory.transform(IRFactory.java:120)
at org.mozilla.javascript.IRFactory.transformInfix(IRFactory.java:738)
at org.mozilla.javascript.IRFactory.transform(IRFactory.java:161)
at org.mozilla.javascript.IRFactory.transformInfix(IRFactory.java:738)
at org.mozilla.javascript.IRFactory.transform(IRFactory.java:161)
at org.mozilla.javascript.IRFactory.transformInfix(IRFactory.java:738)
at org.mozilla.javascript.IRFactory.transform(IRFactory.java:161)
at org.mozilla.javascript.IRFactory.transformInfix(IRFactory.java:740)
at org.mozilla.javascript.IRFactory.transform(IRFactory.java:161)
at org.mozilla.javascript.IRFactory.transformInfix(IRFactory.java:740)
at org.mozilla.javascript.IRFactory.transform(IRFactory.java:161)
at org.mozilla.javascript.IRFactory.transformInfix(IRFactory.java:740)
at org.mozilla.javascript.IRFactory.transform(IRFactory.java:161)
at org.mozilla.javascript.IRFactory.transfor ...
怎么可能修复?同样,类似的函数执行精细的简单JavaScript代码。而且,请不要告诉我使用WebView来执行JavaScript代码。我需要一个具有JavaScript功能的“无头浏览器”,可以从Android服务调用,在后台进行一些网页抓取,同时用户在屏幕上占用其他内容。
格雷格