详解WebView与JS交互传值问题

  

随着混合开发模式比较流行,很多时候,我们需要在原生的基础上,使用WebView加载网页,这样控制更加方便。今天我们来看看,如何将Java对象和列表集合传值给JS调用。

  

<>强如何将Java对象实例传值给JS

  

其实将我们在Android原生中将Java对象实例传值给JS承认并且可以使用的对象,方法非常简单。我们来举个例子。

  

html文件   

我们在本地写了一个html文件,放在资产目录中。

        & lt; !DOCTYPE html>   & lt; html>   & lt; head>   & lt;元charset=皍tf - 8”比;   & lt; title>测试& lt;/title>   & lt; h2 id="名称"祝辞& lt;/h2>   & lt; h2 id="年龄"祝辞& lt;/h2>   & lt; h2 id=靶浴痹? lt;/h2>   & lt; script>//Android需要调用的方法   函数callJS () {   . getelementbyid(“时代”).innerHTML=person.getAge ();   . getelementbyid(“名字”).innerHTML=person.getName ();   . getelementbyid(“性”).innerHTML=person.getSex ();   }   & lt;/script>   & lt;/head>   & lt;/html>   之前      

看到callJS()函数中的人了吗?它就是我们传值进行的Java对象实例。直接就可以使用,获取了年龄,名字,和性别属性。那我们该如何声明该对象,才会被JS所承认呢?

  

<强> Java对象

  

来,看看,我们是如何创建人这个实体类的。代码如下:

        包com.loonggg.wedswebview;      进口android.webkit.JavascriptInterface;/* *   *由loonggg>   webView.loadUrl(“文件:///android_asset/test_object.html”);   最后人p=new ();   p.setName (“loonggg”);   p.setAge (28);   p.setSex(男);      西弗吉尼亚州。addJavascriptInterface (p,“人”);      wv.loadUrl (“javascript: callJS () ");      之前      

西弗吉尼亚州。addJavascriptInterface (p,“人”);的意思就是注入Java对象p给webview为人,在JS调用的时候,对应的就是人。

  

wv.loadUrl (“JavaScript: callJS()),这句话的意思就是:调用JS中的方法callJS()函数方法。

  

<强> Java列表如何传给JS呢?

  

其实按道理来说,是不可以将列表集合直接传值给JS使用,但是既然对象可以传值,JS可以调用java对象,也可以调用Android中的方法,那我们就一拆分的形式传过去。

  

Html文件         & lt; !DOCTYPE html>   & lt; html>   & lt; head>   & lt;元charset=皍tf - 8”比;   & lt; title>测试& lt;/title>   & lt; h2 id="名称"祝辞& lt;/h2>   & lt; h2 id="年龄"祝辞& lt;/h2>   & lt; h2 id=靶浴痹? lt;/h2>      & lt; h2>名单传值测试& lt;/h2>   & lt; h2 id=" name1 "祝辞& lt;/h2>   & lt; h2 id=" age1 "祝辞& lt;/h2>   & lt; h2 id=" sex1 "祝辞& lt;/h2>   & lt; script>//Android需要调用的方法   函数callJS () {   . getelementbyid(“时代”).innerHTML=person.getAge ();   . getelementbyid(“名字”).innerHTML=person.getName ();   . getelementbyid(“性”).innerHTML=person.getSex ();   }      函数callListJS () {   . getelementbyid (“age1”) .innerHTML=window.javatojs.getPersonObject (0) .getAge ();   . getelementbyid (“name1”) .innerHTML=window.javatojs.getPersonObject (0) . getname ();   . getelementbyid (“sex1”) .innerHTML=window.javatojs.getPersonObject (0) .getSex ()   }   & lt;/script>   & lt;/head>   & lt;/html>      之前      

<强>拆分传值

  

如何拆分呢?就是在JS中调用Android中的方法,里面可以按照索引返回集合中的对象,然后再获取对象中的属性。代码如下:

     /* *   *该方法将在js脚本中,通过window.javatojs .....()进行调用   *   * @return   */@JavascriptInterface   公众人物getPersonObject (int指数){   返回list.get(指数);   }      @JavascriptInterface   公共int getSize () {   返回list.size ();   }         list.add (p);   西弗吉尼亚州。addJavascriptInterface(这一点,“javatojs”);      wv.loadUrl (“javascript: callListJS () ");      之前      

整个Acitvity中所有的代码

        公开课MainActivity延伸AppCompatActivity {   私人WebView wv;   私人List列表=new ArrayList ();      @SuppressLint (“JavascriptInterface”)   @Override   保护无效alt="详解WebView与JS交互传值问题">

详解WebView与JS交互传值问题