javascript - Android Javascript 引擎;需要用Rhino、J2V8等替换WebView

标签 javascript android v8 rhino j2v8

我们正在尝试用布局文件和某种 JavaScript 引擎替换我们的 webview 和 html。必须调用大量的 javascript,并且我们有一个相当大的 JavaScriptInterface,需要可由 JS 引擎访问。我一直在尝试 Rhino 和 J2V8,但无法找到一种方法来让 javascript 访问完整的方法类或注释,其工作方式类似于为 WebView 注释方法。

如果有人有任何见解,我们将不胜感激!

谢谢, 乔恩

最佳答案

据我所知,JSV8 没有“开箱即用”的解决方案。 .

但是看看下面的例子:

public class V8ConsoleBridge implements JavaVoidCallback {
    @Override
    public void invoke(V8Object receiver, V8Array parameters) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < parameters.length(); ++i) {
            if (i > 0) {
                sb.append(", ");
            }
            Object object = parameters.get(i);
            if (object instanceof V8Object) {
                V8Object v8Object = (V8Object) object;
                sb.append(v8Object.toString());
                v8Object.release();
            } else {
                sb.append(object);
            }
        }
        Log.i("goebl-v8", sb.toString());
    }

    public static void register(V8 v8) {
        V8ConsoleBridge console = new V8ConsoleBridge();
        V8Object v8Console = new V8Object(v8);
        v8.add("console", v8Console);
        v8Console.registerJavaMethod(console, "debug");
        v8Console.registerJavaMethod(console, "log");
        v8Console.registerJavaMethod(console, "info");
        v8Console.registerJavaMethod(console, "warn");
        v8Console.registerJavaMethod(console, "error");
        v8Console.release();
    }
}

这是一个硬编码桥,用于 JS console 对象访问 Android 日志系统。

您可以编写通用代码

  • 扫描您想要在 JavaScript 中公开的类,就像 WebView 的 JavaScript-Interface 一样,即使使用 @JavascriptInterface 等注释仅包含某些成员
  • invoke 编写通用代码,该代码实际上使用 Java 反射调用接收器类的成员。

当然,如果J2V8有这段有用的代码就太好了,因为它可能会被很多项目使用。当您有可靠的解决方案时,请创建拉取请求,以便我也可以使用它:-)

如果您不介意深入研究源代码,您可能会发现查看 NativeScript 很有用。 。它们提供了一种通用方法来访问 JavaScript 中编译时已知的所有 Java 类,这是通过反射在内部完成的。嗯,我听说他们是这样做的,我实际上没有阅读NativeScript的源代码。在 NativeScript 中,您不必创建桥,它是由构建和运行时系统神奇地完成的。也许该来源启发您将这些想法移植到 J2V8。

关于javascript - Android Javascript 引擎;需要用Rhino、J2V8等替换WebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37667021/

相关文章:

javascript - 如何在 jQuery 中仅显示一次警报

JavaScript 运行时错误 : '[MethodName]' is undefined

java - 如何使用 ArrayList 中的按钮

android - Eclipse android ADT 安装问题

android - 安卓上的zxing项目

javascript - 使用 Firefox 调试基于 v8 的远程应用程序

javascript - 如何从 v8 shell 运行外部 javascript 文件?

javascript - 如何在网页中播放mp3

javascript - 如何使用javascript打印http响应中返回的内容

node.js - 在现代 Node.js 中更新 Error 对象的性能损失