首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引擎;需要将WebView替换为Rhino、J2V8等

引擎;需要将WebView替换为Rhino、J2V8等
EN

Stack Overflow用户
提问于 2016-06-06 21:17:00
回答 1查看 850关注 0票数 2

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

如果有人有任何洞察力,我们将不胜感激!

谢谢,乔恩

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-18 18:08:33

对于JSV8,AFAIK没有“开箱即用”的解决方案。

但是请看下面的示例:

代码语言:javascript
复制
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,即使使用@JavascriptInterface这样的注释,也只能包含某些成员。
  • invoke编写泛型代码,该代码实际上通过使用Java调用接收方类的成员。

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37667021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档