前段时间,才接触这个。看了 很多博客,但是,就是搞不出来。跟别人写的基本一样。哎。愚笨了。谢谢群里帮助我的 大神们,来说说其中的细节吧。
调用前的准备:
//**细节①**
webView.addJavascriptInterface(this,"app");
<!--webView 相关属性设置-->
...
第一种:Java(原生) 调用 Js。
webView.postDelayed(new Runnable() {
@Override
public void run() {
//**细节②** javascript+goods_lists()方法名字。
//如果带有参数"javascript:goods_lists('"+id+"','"+name+"')"多个参数请用逗号隔开。
mStyleWv.loadUrl("javascript:goods_lists()");
//LoadDialog.dismiss(getContext());
}
}, 1000);//**细节③**就是这里,坑了我不止一天时间。 这里采用的一个线程,主要是避免HTML页面 还没加载完毕就调用了JS 方法。 这里设置1S后执行。
//在XML中引入写js方法的文件。
第二种:Js调用Java。
//**细节①**,这个注解一定要加。
@JavascriptInterface//简单点,点击JS中的按钮,跳转到原生页面,我这里有参数,可以不写。
public void SkipParisonof(String id,String img,String name,String num,String price) {
Intent intent=new Intent(getContext(), ComParisonofIndentActivity.class);
intent.putExtra("scomm_id",id);
intent.putExtra("scomm_img",img);
intent.putExtra("scomm_name",name);
intent.putExtra("scomm_price",price);
intent.putExtra("scomm_num",num);
startActivity(intent);
}
//XML那边的,调用方法,没有参数的话,window.app.SkipParisonof()"
<li class="active"><a onclick="window.app.SkipParisonof('0')">全部</a></li>
第三种:就是,js调用java 之后,Java 再调用一下Js方法。
应用场景:比如,原生这边没有参数,但是也不想从新写个接口。这个时候,XML那边调用原生的方法,传个参数过来。原生的再利用这个参数,进行方法的调用。
//js调用java.
@JavascriptInterface//
public void getLogisticsType(final String status){
//java 调用js ,
mLogisticsWv.postDelayed(new Runnable() {
@Override
public void run() {
// mLogisticsWv.loadUrl("javascript:ajax_order_goods('"+id+"','"+status+"')");
// LoadDialog.dismiss(MyShopOrderActivity.this);
}
},0);
}
总之一句,根据需求,各种变换就是了。有什么错误的地方,多多指出。