Android中的WebView控件用法(二)
2012-12-28 16:42
676 查看
本文继第一篇文章介绍webView基本使用之后,作进步android中WebView控件研究使用。WebView有四个控制点、物理返回键的处理、控制网页链接在WebView中跳转、显示加载页面的进度条、处理https请求、利用addJavascriptInterface实现android程序和javascript交互等等。
使用WebView控件访问网页,得先在AndroManifest.xml加网络权限,如果不加权限,则会不能访问网页,往往初学者容易犯这样的错误。
<uses-permission android:name="android.permission.INTERNET"/>
首先,介绍WebView的四个控制点。
1)WebView设置WebChromeClient对象。通过该对象设置可以进行窗口关闭和隐藏、消息控制、js对话框和警告框、进度条显示、显示WebView的焦点、js操作前和操作超时等,具体看官网WebChromeClient详细Api。
2)WebView设置WebViewClient对象。WebView设置改对象,可以实现根据给定的URL下载资源、下载资源开始和结束通知、接受错误信息、控制WebView页面链接等。具体官网WebViewClient详细。
3)WebSettings设置。管理设置WebView的状态,第一次创建WebView的时候,WebView是默认的状态是默认的设置,所以,要改WebView设置的状态,必须通过getSets方法来获取WebSettins对象,就可以进行是否显示有javascript的网页、是否显示网页大小控制、设置字体大小和颜色、设置缓存、设置是否保存密码等等
4)设置addJavascriptInterface方法,将java对象绑定到webView中,以方便从页面js中控制java对象,实现用本地java代码和html页面进行交互,甚至可以进行页面自动化。但如此做存在安全隐患,所以若设置了此方法,请确保webView的代码都是自己完成,详细使用addJavascriptInterface进行自动化见本文5使用addJavascriptInterface完成和js交互
1、back键控制网页后退
Activity默认的back键处理为结束当前Activity,webView查看了很多网页后,希望按back键返回上一次浏览的页面,这个时候我们就需要覆盖onKeyDown函数,告诉他如何处理,如下:
Java代码
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (webView.canGoBack() && event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
} 其中webView.canGoBack()在webView含有一个可后退的浏览记录时返回true
webView.goBack();表示返回webView的上次访问页面
2、在webView网页点击链接的跳转。
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}); shouldOverrideUrlLoading表示当前webView中的一个新url需要加载时,给当前应用程序一个处理机会,如果没有重写此函数,webView请求ActivityManage选择合适的方式处理请求,就像弹出uc和互联网让用户选择浏览器一样。重写后return true表示让当前程序处理,return false表示让当前webView处理
3、页面加载进度
代码如下
Java代码
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
setTitle("页面加载中,请稍候..." + progress + "%");
setProgress(progress * 100);
if (progress == 100) {
setTitle(R.string.app_name);
}
}
});
onProgressChanged通知应用程序当前页面加载的进度
progress 表示当前页面加载的进度,为1至100的整数
4、处理https请求
webView默认是不处理https请求的,页面显示空白,需要进行如下设置:
Java代码
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
// handler.cancel();
// handler.handleMessage(null);
}
});
onReceivedSslError为webView处理ssl证书设置
其中handler.proceed();表示等待证书响应
handler.cancel();表示挂起连接,为默认方式
handler.handleMessage(null);可做其他处理
5、使用addJavascriptInterface完成和js交互
5.1 javascript中调用java对象及方法
设置webView的addJavascriptInterface方法,该方法有两个参数,第一个参数为被绑定到js中的类实例,第二个参数为在js中暴露的类别名,在js中引用java对象就是用这个名字
Java代码
ClassBeBindedToJS classBeBindedToJS = new ClassBeBindedToJS();
webView.addJavascriptInterface(classBeBindedToJS, "classNameBeExposedInJs");
ClassBeBindedToJS classBeBindedToJS = new ClassBeBindedToJS();
webView.addJavascriptInterface(classBeBindedToJS, "classNameBeExposedInJs");
实现绑定到js的类,其中的javaMethod方法我们将在页面前端js中调用,用于返回一段内容。showHtml用来使用AlertDialog显示一段html代码,稍后将使用到
5.2 java中调用js方法
用webView的loadUrl实现,比如现在我们想在页面加载完成后调用js中的hello函数,实现如下:
Java代码
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView webView, String url){
webView.loadUrl("javascript:hello()");
}
});
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView webView, String url){
webView.loadUrl("javascript:hello()");
}
});怎么样,很简单吧^_^,直接loadUrl("javascript:hello()")就可以了
使用WebView控件访问网页,得先在AndroManifest.xml加网络权限,如果不加权限,则会不能访问网页,往往初学者容易犯这样的错误。
<uses-permission android:name="android.permission.INTERNET"/>
首先,介绍WebView的四个控制点。
1)WebView设置WebChromeClient对象。通过该对象设置可以进行窗口关闭和隐藏、消息控制、js对话框和警告框、进度条显示、显示WebView的焦点、js操作前和操作超时等,具体看官网WebChromeClient详细Api。
2)WebView设置WebViewClient对象。WebView设置改对象,可以实现根据给定的URL下载资源、下载资源开始和结束通知、接受错误信息、控制WebView页面链接等。具体官网WebViewClient详细。
3)WebSettings设置。管理设置WebView的状态,第一次创建WebView的时候,WebView是默认的状态是默认的设置,所以,要改WebView设置的状态,必须通过getSets方法来获取WebSettins对象,就可以进行是否显示有javascript的网页、是否显示网页大小控制、设置字体大小和颜色、设置缓存、设置是否保存密码等等
4)设置addJavascriptInterface方法,将java对象绑定到webView中,以方便从页面js中控制java对象,实现用本地java代码和html页面进行交互,甚至可以进行页面自动化。但如此做存在安全隐患,所以若设置了此方法,请确保webView的代码都是自己完成,详细使用addJavascriptInterface进行自动化见本文5使用addJavascriptInterface完成和js交互
1、back键控制网页后退
Activity默认的back键处理为结束当前Activity,webView查看了很多网页后,希望按back键返回上一次浏览的页面,这个时候我们就需要覆盖onKeyDown函数,告诉他如何处理,如下:
Java代码
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (webView.canGoBack() && event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
} 其中webView.canGoBack()在webView含有一个可后退的浏览记录时返回true
webView.goBack();表示返回webView的上次访问页面
2、在webView网页点击链接的跳转。
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}); shouldOverrideUrlLoading表示当前webView中的一个新url需要加载时,给当前应用程序一个处理机会,如果没有重写此函数,webView请求ActivityManage选择合适的方式处理请求,就像弹出uc和互联网让用户选择浏览器一样。重写后return true表示让当前程序处理,return false表示让当前webView处理
3、页面加载进度
代码如下
Java代码
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
setTitle("页面加载中,请稍候..." + progress + "%");
setProgress(progress * 100);
if (progress == 100) {
setTitle(R.string.app_name);
}
}
});
onProgressChanged通知应用程序当前页面加载的进度
progress 表示当前页面加载的进度,为1至100的整数
4、处理https请求
webView默认是不处理https请求的,页面显示空白,需要进行如下设置:
Java代码
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
// handler.cancel();
// handler.handleMessage(null);
}
});
onReceivedSslError为webView处理ssl证书设置
其中handler.proceed();表示等待证书响应
handler.cancel();表示挂起连接,为默认方式
handler.handleMessage(null);可做其他处理
5、使用addJavascriptInterface完成和js交互
5.1 javascript中调用java对象及方法
设置webView的addJavascriptInterface方法,该方法有两个参数,第一个参数为被绑定到js中的类实例,第二个参数为在js中暴露的类别名,在js中引用java对象就是用这个名字
Java代码
ClassBeBindedToJS classBeBindedToJS = new ClassBeBindedToJS();
webView.addJavascriptInterface(classBeBindedToJS, "classNameBeExposedInJs");
ClassBeBindedToJS classBeBindedToJS = new ClassBeBindedToJS();
webView.addJavascriptInterface(classBeBindedToJS, "classNameBeExposedInJs");
实现绑定到js的类,其中的javaMethod方法我们将在页面前端js中调用,用于返回一段内容。showHtml用来使用AlertDialog显示一段html代码,稍后将使用到
5.2 java中调用js方法
用webView的loadUrl实现,比如现在我们想在页面加载完成后调用js中的hello函数,实现如下:
Java代码
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView webView, String url){
webView.loadUrl("javascript:hello()");
}
});
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView webView, String url){
webView.loadUrl("javascript:hello()");
}
});怎么样,很简单吧^_^,直接loadUrl("javascript:hello()")就可以了
相关文章推荐
- Android中的WebView控件用法
- Android控件之WebView
- Android:控件WebView显示网页
- 关于android webview中访问web页面带有upload上传控件的解决办法
- Android如何获取fragment里的webview控件资源
- Android:控件WebView显示网页
- 系出名门Android(7) - 控件(View)之ZoomControls, Include, VideoView, WebView, RatingBar, Tab, Spinner, Chrono
- Android WebView控件的显示,调用网页,然后隐藏
- Android:控件WebView显示网页
- Android控件之WebView
- android webview用法小结2 java与javascript的交互
- Android WebView组件用法详解
- Android WebView控件使用介绍
- Android自定义WebView实现Youtube网络视频播放控件
- Android中WebView的意义及用法
- [android进阶]webview控件的使用
- Android开发之常用框架WebView详解代码。超详细,送给初学者,完全掌握此控件
- android中webview控件和javascript交互实例
- Android控件webview使用
- webview在android端基本用法(三)