什么是Android WebView上的Javascript接口的有效返回值?

我有一个Android WebView,它具有通过addJavascriptInterface方法调用Android方法的JavaScript:

myWebview.addJavascriptInterface(new JavascriptBridge(), "Android"); public class JavascriptBridge { public String getAString() { return "my_str"; } } 

这工作正常。 我想返回一个int列表到WebView。 试过这个:

 public class JavascriptBridge { public int[] getMyInts() { return new int[]{1,2,3}; } } 

但是在JS中调用这个函数会返回undefined:

 var myInts = Android.getMyInts(); 

有一个Android Javascript接口的有效返回types的列表? 这只是原始的吗?

我还没有看到有效types的列表(用于将值传递给Java函数并返回),但只有基元和string似乎工作。

你可以使用JSON(例如在Javascript中进行string化和parsing,在json.org上检查各种Java选项

你可以返回任何东西,原语或对象。 对象通过toString()方法转换为string。 如果JavascriptInterface方法返回一个JSONstring(例如一个Object toString()输出JSON),那么你可以直接parsing这个string:

 var array = JSON.parse(window.android.getSomeJsonThing()); 

讨厌这样说,但“谷歌”团队真的把我们搞砸了。

以下是我所知道的关于您的“PAID”FOR(如绝对所有权)GOOGLE产品的隐藏/未经证实/不受支持的JavascriptInterfacetypes转换。

没有var参数。 尝试通话导致找不到方法。

你不能一般通过java的序号捕获所有types的对象从JavaScript传递值到Java。 Java特定types的非特定匹配总是等于null(这是编码人员有意编写的I.-M.-H.-KNOWLEDGE-THINKING中最愚蠢的错误)。

然而,你可以从java传递任何你喜欢的对象给js,但是js不能使用没有注释的东西的对象方法,也不会有对象字段的访问成功。 即使通过一个(不存在的)COURTESY bean getter / setter auto value:map / Proxy。

[这是纳粹型的代码:MAXIMUM,其中webview就像一个集中营; 对于没有开箱即用function的embedded式设备来说,这对于工业/军事级别的硬件和密码来说没有任何意义。]

最后,你不能发送任何types的JavaScript对象,我知道从JavaScript到Java,其中包括HTML对象文件及其组件(我有道理呢?)。

对于所有的谷歌努力工作,以防止编写代码为他们的应用程序,这是一个净故障。 我已经写了代码,可以通过path名称调用公共JavaScript函数,并获得结果(内置数据漂白后,任何通常有用的数据损坏)。

这整个补丁应该是关于一个类的黑客使用reflection。 而不是禁用反思来解决问题,整个Web开发平台被locking。 (反竞争,反垄断)。 我们都知道html和它的同行是世界上最好的应用程序开发接口。

不是没有,如果你足够努力,你仍然可以在浏览器中注入reflection“错误”,并创build代理,以便您可以在$ 50-500.00美元的投资中完成一些认真的web applet开发。

从我的观点来看,这是对竞争产品的精心策划的攻击。 不是一个安全问题。 所有人都要写的正确的代码来locking从远程访问门,如果你没有这样做,那么你会得到一个加载插件的Java程序相同的结果。 最终:令人满意的用户体验。

我想我们都是大人。 不过,谷歌对事件的事实采取了咄咄逼人的立场,把我们全部放在幼儿园,不顾我们的贡献和意愿。

简单地说,软件被禁用,因为谷歌的UI开发工具无法与Java标准开发的HTML标准的简单性和灵活性竞争。

这可能是一个正确的解决scheme是谷歌或其他软件公司发布一个SDK,提供直接访问所有的文件对象作为一个库的组件没有javascript的支持(因为你可以使用mozilla犀牛或其他一些Java – 基于脚本的控制器),而应用程序开发人员可以承担和委托使用库的所有风险。 locking代码库,当你不知道开发人员的使用情况或用户的需求是幼稚的。