代码之家  ›  专栏  ›  技术社区  ›  Piyush

Android中的javascript

  •  6
  • Piyush  · 技术社区  · 14 年前

    是否可以在Android中使用javascript?如果是,怎么做?请提供一些例子。

    谢谢。

    3 回复  |  直到 7 年前
        1
  •  8
  •   Eric Lange    7 年前

    我来这里参加聚会太晚了,但我确实有这个需要。iOS 7现在包括javascriptcore 在本机上,它非常容易使用(尽管文档有限)。问题是 我不想使用它,除非我也可以在Android上使用类似的东西。所以我创造了 AndroidJSCore project . 它允许您在Android中本机使用JavaScript代码,而不需要庞大的WebView和注入。您还可以无缝地使异步 Java与JavaScript之间的调用。

    更新日期:2017年3月27日: AndroidJScore已被弃用,取而代之的是 LiquidCore . Liquidcore基于V8而不是JavaScript,但工作原理基本相同。查看 documentation on using LiquidCore as a raw Javascript engine

    从文档中:

    …要开始,您需要创建一个javascript JSContext . JS代码的执行 在此上下文中发生,单独的上下文是独立的虚拟机 不要相互影响。

    JSContext context = new JSContext();
    

    这个上下文本身就是一个javascript对象。因此,您可以获取和设置它的属性。 因为这是全局javascript对象,所以这些属性将位于顶层 环境中所有后续代码的上下文。

    context.property("a", 5);
    JSValue aValue = context.property("a");
    double a = aValue.toNumber();
    DecimalFormat df = new DecimalFormat(".#");
    System.out.println(df.format(a)); // 5.0
    

    您还可以在上下文中运行javascript代码:

    context.evaluateScript("a = 10");
    JSValue newAValue = context.property("a");
    System.out.println(df.format(newAValue.toNumber())); // 10.0
    String script =
        "function factorial(x) { var f = 1; for(; x > 1; x--) f *= x; return f; }\n" +
        "var fact_a = factorial(a);\n";
    context.evaluateScript(script);
    JSValue fact_a = context.property("fact_a");
    System.out.println(df.format(fact_a.toNumber())); // 3628800.0
    

    您还可以在Java中编写函数,但将它们暴露给JavaScript:

    JSFunction factorial = new JSFunction(context,"factorial") {
        public Integer factorial(Integer x) {
            int factorial = 1;
            for (; x > 1; x--) {
                factorial *= x;
            }
            return factorial;
        }
    };
    

    这将创建一个调用Java方法的JavaScript函数 factorial 什么时候 从javascript调用。然后可以将其传递给javascript vm:

    context.property("factorial", factorial);
    context.evaluateScript("var f = factorial(10);")
    JSValue f = context.property("f");
    System.out.println(df.format(f.toNumber())); // 3628800.0
    
        2
  •  1
  •   Joel    14 年前

    你的意思是用javascript制作一个本地应用程序吗?我知道有些工具 Titanium Mobile 这使您可以使用Web工具/语言制作本机应用程序。

    你也可以制作网络应用。有大量的资源和教程。只需搜索“Android网络应用教程”或类似的内容。

        3
  •  1
  •   Alex Djioev    14 年前

    是的,你可以创建一个总结代码,指向HTML页面,包括你的javascript和CSS。

    有不同的库可以帮助您: