Android中的JavaScript

前端之家收集整理的这篇文章主要介绍了Android中的JavaScript前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以在 Android中使用 JavaScript?如果是这样,怎么样?请提供一些例子.

谢谢.

解决方法

我在这里参加派对的时间已经很晚了,但我有这个确切的需求. iOS 7现在包含JavaScriptCore
原生,它很容易使用(尽管有限的文档).问题是
我不想使用它,除非我也可以在Android上使用类似的东西.所以我创建了 AndroidJSCore project.它允许您在Android中原生使用JavaScript代码,而不需要庞大的WebView和注入.您还可以无缝地进行异步
Java和Javascript之间的调用.

更新于3月27日:AndroidJscore已被弃用,赞成LiquidCore.LiquidCore基于V8而不是JavascriptCore,但基本相同.见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;
    }
};

这将创建一个JavaScript函数,该函数将在何时调用Java方法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
原文链接:https://www.f2er.com/android/309339.html

猜你在找的Android相关文章