WebView是用来展示网页的,使得网页能在Activity中显示。WebView是基于WebKit的,因此包含了前进,后退,历史,放大,缩小等功能。我们在使用WebView的过程中,常用的是哪些设置呢?
1.防跳转到外部浏览器设置
2.进度条等控制
3.JS注入
4.离线缓存
首先,我们先来了解两个方法,setWebViewClient()和setWebChrome();
a. setWebViewClient() : 主要用来控制和检测网页的加载状况。
public boolean shouldOverrideUrlLoading (WebView view, String url)
当一个ur将要加载,会调用这个方法。如果WebView没有设置WebViewClient,则由ActivityManager选择可以处理url的程序进行响应;如果WebView设置了WebViewClient,则需要看返回值,返回true,表示由当前应用程序自行处理,如果返回false,则由当前webView进行加载。这个方法返回默认是false,即由WebView进行网页加载。
其他需要了解的,网页开始加载,正在加载资源,加载完成等方法通知。
通过这个方法,我们可以了解到,只要WebView设置了setWebViewClient(),当前应用程序加载url就不会跳转到外部浏览器。
b.setWebChromeClient();需要更丰富的处理效果,比如JS、进度条等。因此我们需要这些效果时,需要重写WebChromeClient()的方法,比如:
public void onProgressChanged(WebView view, int newProgress) {}
这个方法是WebChromeClient通知应用程序当前加载的进度,通过这个,我们可以设置自己的进度条加载进度。
这样,我们就解决1、2两个问题。
c.JS注入。
mWebSettings.setJavaScriptEnabled(true); mWebView.addJavascriptInterface(new Object(), "name");
将Object对象,注入到Web页面中,使得Web中的Js可以操作这个对象。Window.name.function();
d.离线缓存
h5可以进行离线缓存,但是WebView如何设置,才能使得WebView支持H5的离线缓存呢?请参考下面的代码
webseting.setDomStorageEnabled(true); webseting.setAppCacheMaxSize(1024*1024*8);//设置缓冲大小 String appCacheDir = this.getApplicationContext().getDir("cache", Context.MODE_PRIVATE).getPath(); webseting.setAppCachePath(appCacheDir); webseting.setAllowFileAccess(true); webseting.setAppCacheEnabled(true); webseting.setCacheMode(WebSettings.LOAD_DEFAULT);