在服务的深处找不到任何关于 V8 的信息。
最终使用了 Rhino,但是对任何追随我的人的警告,它非常慢。
只需从
https://developer.mozilla.org/en-US/docs/Rhino/Download_Rhino?redirectlocale=en-US&redirectslug=RhinoDownload的 Rhino 官方最新发行版中获取 jar
js.jar 是您在 zip 中需要的。js-14 是您不需要的更大的 java 1.4 兼容版本。
集成很简单,只需将 jar 放入您的 libs 文件夹即可。
下面是我使用 javascript 抓取网页(将数据转换为格式更好的 json)。使用我从 assets 文件夹中制作的 parse.js 脚本。
Rhino 不附带 DOM,并且 env.js 因 stackoverflow 错误而崩溃。总的来说,我会说这个解决方案很慢并且没有得到很好的支持......
public static void sync(Context context, ){
String url = BASE_URL;
String html = Utils.inputStreamToString(Utils.getHTTPStream(url));
timeList.add(System.currentTimeMillis());
if(html == null){
Utils.logw("Could not get board list.");
return;
}
String parsingCode = null;
try {
parsingCode = Utils.inputStreamToString(context.getAssets().open("parse.js"));
} catch (IOException e) {
Utils.logw("Could not get board parser js");
return;
}
// Create an execution environment.
org.mozilla.javascript.Context cx = org.mozilla.javascript.Context.enter();
// Turn compilation off.
cx.setOptimizationLevel(-1);
try {
// Initialize a variable scope with bindnings for
// standard objects (Object, Function, etc.)
Scriptable scope = cx.initStandardObjects();
ScriptableObject.putProperty(
scope, "html", org.mozilla.javascript.Context.javaToJS(html, scope));
//load up the function
cx.evaluateString(scope, parsingCode,"parseFunction", 1 , null);
// Evaluate the script.
Object result = cx.evaluateString(scope, "myFunction()", "doit:", 1, null);
JSONArray jsonArray = new JSONArray(result.toString());