如何从JavascriptInterface返回JSONArray

How to return a JSONArray from JavascriptInterface

本文关键字:返回 JSONArray JavascriptInterface      更新时间:2023-09-26

我试图使用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?

解决方案是我在讨论中提到的,在Javascript中对JSONArray进行字符串化:

mWebView.loadUrl("javascript: var JSString = JSON.stringify(JSJSONArray);");
mWebView.loadUrl("javascript: JSBridge.transferFormData(JSString)");

然后在Java端,使用问题中的第二个代码段将String转换回JSONArray。