您的位置:首页 > 移动开发

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()")就可以了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: