我试图使用Javascript捕获HTML的表单数据并将它们作为JSONArray返回到Java,但似乎JSONArray未在JavascriptInterface中正确返回到Java。
Javascript在Chrome中完美运行,因此问题应该是在java端或接口上。
mWebView.loadUrl("javascript: FeArray=document.getElementsByTagName('input')");
mWebView.loadUrl("javascript: JSJSONArray = []");
mWebView.loadUrl("javascript: for(i=0;i<FeArray.length;i++) { fe=FeArray[i]; JSJSONArray.push({'id':fe.id,'type':fe.type,'checked':fe.checked,'value':fe.value});}");
mWebView.loadUrl("javascript: JSBridge.transferFromJS2Java(JSJSONArray)");
transferFromJS2Java是一个@JavascriptInterface函数,实现如下:
public class JSBridge{
@JavascriptInterface
public void transferFromJS2Java(String data) {
mJSONArray = new JSONArray(data);
}
}
这里mJSONArray是一个全局变量。
我想我可能无法以这种方式复制JSONArray。有没有更好的方法可以将JSJSONArray从Javascript复制到Java?
答案 0 :(得分:0)
所以我在讨论中提到的解决方案是在Javascript中对JSONArray进行字符串化:
mWebView.loadUrl("javascript: var JSString = JSON.stringify(JSJSONArray);");
mWebView.loadUrl("javascript: JSBridge.transferFormData(JSString)");
然后在Java端,使用问题中的第二个代码段将String转换回JSONArray。