android WebView, WebChromeClient和WebViewClient加载网页基本用法

原创 2013年09月18日 14:59:20
WebView, WebChromeClient和WebViewClient加载网页基本用法


 webview是android中的浏览器控件,在一些手机应用中常会用到b/s模式去开发应用,这时webview的强大功能就会显示出来。
 1、webview的几点设置
 
 权限设置:.AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误
 js开放设置: 如果访问的页面中有Javascript,则webview必须设置支持Javascript。webview.getSettings().setJavaScriptEnabled(true);  否则,页面的js将不会起作用.
滚动条设置:this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
设置缓存模式:setCacheMode
要注意的是,其中的webView的一系列用法,比如 webView.getSettings().setJavaScriptEnabled(true);设置可以使用javscript; 
webView.getSettings().setJavaScriptEnabled(true);   
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);   
webView.setHorizontalScrollBarEnabled(false);   
webView.getSettings().setSupportZoom(true);   
webView.getSettings().setBuiltInZoomControls(true);   
webView.setInitialScale(70);   
webView.setHorizontalScrollbarOverlay(true);


2、在WebView的设计中,WebView主要完成解析、渲染界面。其他交给
(1)、事件监听对象(WebViewClient) 处理各种通知、请求事件的,具体来说包括:
事件监听对象WebViewClient中,主要有如下几个常用方法:
shouldOverrideUrlLoading:在web页面里单击链接的时候,会自动调用android自带的浏览器来打开链接,需要通过该方法在本页面打开;
@Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
onLoadResource:加载资源时响应
onPageStart:在加载页面时响应
onPageFinish:在加载页面结束时响应
onReceiveError:在加载出错时响应
onReceivedHttpAuthRequest:


(2)、WebChromeClient是辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等 
 onCloseWindow(关闭WebView) 
 onCreateWindow() 
 onJsAlert (WebView上alert是弹不出来东西的,需要定制你的WebChromeClient处理弹出) 
 onJsPrompt 
 onJsConfirm 
 onProgressChanged 
 onReceivedIcon 
 onReceivedTitle
3、返回处理
如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。
public boolean onKeyDown(int keyCode, KeyEvent event) {        
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {        
            mWebView.goBack();        
                   return true;        
        }        
        return super.onKeyDown(keyCode, event);        
    }
4、支持javascripte自定义对象
可以通过addJavascriptInterface()方法,添加js自定义对象,使用web页面与手机java程序能够进行通信交互。
5、DownloadListener接口
该接口里面有一个方法,onDownloadStart()下载侦听接口,如果客户代码实现该接口,则在下载开始、失败、挂起、完成等情况下,DownloadManagerCore对象会调用客户代码中实现的DownloadListener方法。
6、几个注意点
1)为了让WebView从apk文件中加载assets,Android SDK提供了一个schema,前缀为"file:///android_asset/"。WebView遇到这样的schema,就去当前包中的 assets目录中找内容。如上面的"file:///android_asset/demo.html" 
2)addJavascriptInterface方法中要绑定的Java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用 Handler的目的(今天我是在没有在handler中处理,所以导致webviewclient中的onPageStart方法与addJavascriptInterface中的方法起了冲突,二个人的执行顺序时常互换,之后改成handlder实现,就解决其中的问题,正确的顺序是onPageStart在addJavascriptInterface中的handlder事件处理之前执行)。

经常需要对WebView中加载的内容是否完成或者是否加载失败进行判别

2014-11-11 09:11 在我们的项目中,经常需要对WebView中加载的内容是否完成或者是否加载失败进行判别,这两天写的一个小应用就涉及到了这一点。 WebView的实质...
  • aasmfox
  • aasmfox
  • 2015-07-15 14:01:11
  • 2822

WebView加载网页失败以后

在APP和网页交互时,很有可能出现加载失败的情况。 为了不让用户看到上述令人崩溃的默认失败页面,这里进行一下简单处理!...
  • guchuanhang
  • guchuanhang
  • 2016-09-12 14:28:38
  • 6697

Android之WebViewClient与WebChromeClient的区别

ANDROID应用开发的时候可能会用到WEBVIEW这个组件,使用过程中可能会接触到WEBVIEWCLIENT与WEBCHROMECLIENT,那么这两个类到底有什么不同呢? WebViewClie...
  • zlj_fly
  • zlj_fly
  • 2014-10-11 18:12:35
  • 8409

使用WebView, WebChromeClient和WebViewClient加载网页

在android应用中,有时要加载一个网页,如果能配上一个进度条就更好了,而android  中提供了其很好的支持,下面是一个例子程序,先帖:  ...
  • raphael55
  • raphael55
  • 2011-11-16 10:30:33
  • 27931

WebView使用解析(二)之WebViewClient/WebChromeClient

WebViewClient—–在影响View的事件到来时,会通过WebViewClient中的方法回调通知用户。 WebChromeClient—–当影响浏览器的事件到来时,就会通过WebChrom...
  • huaxun66
  • huaxun66
  • 2017-06-14 21:39:48
  • 2308

android webview loadurl弹出系统浏览器问题

APP套壳,  使用WebView.loadUrl("xxx"); 总是弹出系统浏览器,  网上搜索解决方案,  要重新设置: webview.setWebViewClient(new WebVie...
  • wqhjfree
  • wqhjfree
  • 2015-10-22 17:07:15
  • 8583

如何让安卓WebView支持js调用window.open()和window.close()的方法。

最近项目中遇到一个webview开发时的问题,web前端开发人员在网页上实现了一个功能。功能是在A html页面,打开一个新的B html页面,然后再B页面中选择一个联系人,把值返回给A页面。做web...
  • u012912435
  • u012912435
  • 2016-05-23 20:03:13
  • 5590

setwebviewclient()和setwebchromeclient()

整理一些在网上搜集的webview的两个方法的区别:setwebviewclient()和setwebchromeclient(),以备查阅。 原文网址:http://www.android100....
  • tingyalove
  • tingyalove
  • 2015-01-14 14:52:51
  • 1757

关于android WebViewClient和WebChromeClient

一、Android之WebViewClient与WebChromeClient的区别 ANDROID应用开发的时候可能会用到WEBVIEW这个组件,使用过程中可能会接触到WEBVIEWC...
  • jackyhuangch
  • jackyhuangch
  • 2012-12-18 00:36:19
  • 33737

WebViewClient与WebChromeClient的区别

Android应用开发的时候可能会用到WebView这个组件,使用过程中可能会接触到WebViewClient与WebChromeClient,那么这两个类到底有什么不同呢? WebViewClie...
  • linghu_java
  • linghu_java
  • 2011-11-02 10:17:29
  • 22071
收藏助手
不良信息举报
您举报文章:android WebView, WebChromeClient和WebViewClient加载网页基本用法
举报原因:
原因补充:

(最多只允许输入30个字)