我可以传递一个Javascript对象到一个Android WebView吗?

我正在将一个Web应用程序迁移到一个Android版本。 在收到并处理了JSON数据之后,我在页面中保存了一个Javascript对象数组。

我怎样才能将一个JavaScript对象的完整内容“out”传递给webview容器,以使用原生android控件进行显示?

最终,我可以创build一个JavaScript接口,其中包含每个可能的JavaScript对象属性的参数 – 但这似乎过于沉重。

有人能帮忙吗 ?

Solutions Collecting From Web of "我可以传递一个Javascript对象到一个Android WebView吗?"

Android的WebView包含一个名为addJavascriptInterface(Object obj, String interfaceName) ,在这里应该很有用。

使用此方法,可以通过Web视图中的JavaScript代码访问您添加为接口的对象obj 。 在你的情况下,你可以传入一个具有setter方法的对象,该方法将一些JavaScript对象传回给Java。

您仍然需要创build将您的JavaScript对象转换为JSON对象的粘合代码。 对于一个快速的方法,你可以让你的接口使用从JavaScript传递的JSONstring在Java端生成一个JSONObject。 Java中的JSONObject类有一个接受包含JSON数据的string的构造函数。 所以,你可以直接将string化的结果传回给Java,并以此方式创build对象。 例如:

 class JSInterface { HashMap<String, JSONObject> mObjectsFromJS = new HashMap<String, JSONObject>(); public void passObject(String name, String json) { mObjectsFromJS.put(name, new JSONObject(json)); } } //At some point, register using: mJSInterface = new JSInterface(); mWebView.addJavascriptInterface(mJSInterface, "Android"); 

然后,在JavaScript端,在variablesjsonData中有一个未分离的JSON blob的处理程序:

 Android.passObject("pageItems", jsonData); 

现在,Java端的JSInterface将有一个包含项目的JSONObject,您可以使用JSONObject提供的getter访问这些项目。 通过Javascript调用创build的对象将位于mObjectsFromJS映射中。 您当然想要将其他辅助方法添加到JSInterface类中,以便更好地pipe理对象。

我没有编译或testing任何这些方法,所以你可能不得不调整他们一点正确的操作。 但希望这给你的想法。

但是,如果对象具有一致的接口和数据项,则只需创build一个简单的JavaScript粘连函数,使用setter方法将JavaScript对象属性绑定到Java端对象字段将更为明智。

请注意这是给远程代码的能力来触发设备上的本机代码。 如果您无法完全控制正在加载到WebView的页面/脚本,则应确保obj公开的行为不允许任何漏洞利用。