你的位置:首页 > Java教程

[Java教程]webview中java与js交互


WebView提供了在Android应用中展示网页的强大功能。也是目前Hybird app的大力发展的基础。作为Android系统的一个非常重要的组件,它提供两方面的强大的能力:对HTML的解析,布局和绘制;对JavaScript的解释和执行。Hybird App的组成是Native+H5,Native部分是java语言实现;而JavaScript是H5中必不可少的部分。因此就会遇到Java与JavaScript互相调用的情况!这里记录了一个最基本的互相调用的例了!

 

1.Native布局中添加WebView组件

1 <WebView2     android:id="@+id/wv_contacts"3     android:layout_below="@id/tv_title"4     android:layout_width="match_parent"5     android:layout_height="match_parent">6 </WebView>

 

2.初始化WebView,设置允许使用JavaScript并载入页面

1  private void initWebView() {2     mWebView = (WebView) findViewById(R.id.wv_contacts);3     WebSettings settings = mWebView.getSettings();4     settings.setJavaScriptEnabled(true);5     mWebView.loadUrl("file:///android_asset/constacts.html");6   }

 

3.java调用javaScript(mWebView.loadUrl("javascript:method(param)");)
首先定义好JavaScript函数:

1 function showData(constactsData){2       var html="";3       var ullist = document.getElementById("contacts_list");4       var constactsJsonData = eval(constactsData);5       for(var i = 0; i < constactsJsonData.length; i++){6         html += "<li onclick=callPhone(\"" + constactsJsonData[i].number + "\")>" + constactsJsonData[i].name + "</li>";7       }8       ullist.innerHTML = html;9     }

然后在java调用JavaScript,放在onPageFinished回调中调用是为了保证,调用Js时,Js已全部加载完成

 1 mWebView.setWebViewClient(new WebViewClient() { 2       @Override 3       public boolean shouldOverrideUrlLoading(WebView view, String url) { 4         view.loadUrl(url); 5         return true; 6       } 7  8       @Override 9       public void onPageFinished(WebView view, String url) {10         super.onPageFinished(view, url);11         showContactsInfo();12       }13     });14 15 private void showContactsInfo() {16     String info = jsInterface.readContacts();17     mWebView.loadUrl("javascript:showData(" + info + ")");18   }

 

4.在Js中调用Java(mWebView.addJavascriptInterface(new JavaScriptInterface(), "interface");)。如代码所示,在Js中调用Java Native方法。需要将需要调用的方法所属对象转化为一个别名。将这个别名透传到JavaScript中,然后在JavaScript中通过别名访问Native方法。

首先添加别名

 1 mWebView.addJavascriptInterface(new JSInterface(this.getApplicationContext()), "jsinterface"); 
然后定义Native方法

1 public void callPhone(String number) {2     Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + number));3     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);4     mContext.startActivity(intent);5   }

最后通过别名在JavaScript中进行调用
 1 function callPhone(number){ 2 jsinterface.callPhone(number); 3 } 

 

如果便完成了Hybird App中的最基本的Java和JavaScript的通信的功能!

 




贵州旅游线路大全贵州旅游报价价格贵州旅游团购优惠深圳去贵州旅游报价跟团去贵州旅游多少钱神龙水世界学生票多少钱?桂林神龙水世界学生门票价格? 神龙水世界官网,桂林神龙水世界官方网站。 神龙水世界好玩吗?桂林神龙水世界怎么样? 南海影视城4月好玩活动?佛山南海影视城怎么样? 2015三八节梅州客天下女士免费吗?客天下景区三八妇女节门票价格? 2015广饶温泉度假村三八妇女节女士免费吗?广饶温泉度假村3.8女士门票优惠吗? 香市动物园有班车吗?东莞香市动物园在哪里坐车? 济南春季赏花指南 寻找醉美“花花世界” 如何在武陵源核心景区内游玩? 无锡的地铁1号线突然变得萌萌哒 如何去武陵源核心景区? 张家界和凤凰如何花最少的钱? 泰国电话卡有哪几种? 迪拜帆船酒店能吃到什么?有什么好吃? 泰国华欣适合旅游度假吗? 去泰国旅游的最佳时期是什么时候?天气怎么样? IDT5V9888NLGI Datasheet IDT5V9888NLGI Datasheet IDT71V3558XS133PFG8 Datasheet IDT71V3558XS133PFG8 Datasheet IDT72V3650L10PF Datasheet IDT72V3650L10PF Datasheet 大庆到香港旅游价格 大庆到香港旅游价格 大庆到香港旅游价格 浙江跟团香港三天价格 浙江跟团香港三天价格 浙江跟团香港三天价格 长沙到香港旅游价格 长沙到香港旅游价格 长沙到香港旅游价格