WebView加载H5
程序员文章站
2022-04-26 18:37:02
...
webview.setHorizontalScrollBarEnabled(false);//设置横向滚动属性
webview.setVerticalScrollBarEnabled(false);//设置纵向滚动属性
// 启用javascript
WebSettings webSettings = webview.getSettings();
webSettings.setUseWideViewPort(true);//将图片调整到适合webview的大小
webSettings.setLoadWithOverviewMode(true);//是否允许WebView度超出以概览的方式载入页面,默认false。
webSettings.setJavaScriptEnabled(true); //支持js
webSettings.setBuiltInZoomControls(true);//是否使用内置的缩放机制
webSettings.setSupportZoom(true);//支持缩放
webSettings.setDisplayZoomControls(false); //不显示webview缩放按钮
webSettings.setDefaultTextEncodingName("utf-8");//设置默认的字符编码集,默认”UTF-8”.
webview.requestFocusFromTouch();//Touch模式下不支持焦点,也能够获得焦点使用的。
// 设置 缓存模式
if (isNetworkConnected(this)) {
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);//根据cache-control决定是否从网络上取数据。
} else {
webSettings.setCacheMode(
WebSettings.LOAD_CACHE_ELSE_NETWORK);//只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
}
webSettings.setBlockNetworkImage(true);// 把图片加载放在最后来加载渲染
webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH);
// 支持多窗口
webSettings.setSupportMultipleWindows(true); //多窗口
// 开启 DOM storage API 功能
webSettings.setDomStorageEnabled(true);
// 开启 Application Caches 功能
webSettings.setAppCacheEnabled(true);
//设置数据库缓存路径
String cacheDirPath = getFilesDir().getAbsolutePath()+WEBVIEW_CACAHE_NAME;
webSettings.setDatabasePath(cacheDirPath);
//设置 Application Caches 缓存目录
webSettings.setAppCachePath(cacheDirPath);
webview.loadUrl(storeUrl);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
//设定加载开始的操作
showCustomDiaolog();
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
dismissCustomDialog();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
返回的时候
if (webview.canGoBack()) {
webview.goBack();//返回上一页面
} else {
finish();//退出活动
}
关于webView属性的介绍 ,这个http://blog.csdn.net/kevinscsdn/article/details/52241334#comments比较全
webview 缓存模式(5种)
LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
LOAD_DEFAULT: 根据cache-control决定是否从网络上取数据。
LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式
LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
清除缓存
/**
* 清除WebView缓存
*/
public void clearWebViewCache(){
//清理Webview缓存数据库
try {
deleteDatabase("webview.db");
deleteDatabase("webviewCache.db");
} catch (Exception e) {
e.printStackTrace();
}
//WebView 缓存文件
File appCacheDir = new File(getFilesDir().getAbsolutePath()+WEBVIEW_CACAHE_NAME);
Log.e(TAG, "appCacheDir path="+appCacheDir.getAbsolutePath());
File webviewCacheDir = new File(getCacheDir().getAbsolutePath()+"/webviewCache");
Log.e(TAG, "webviewCacheDir path="+webviewCacheDir.getAbsolutePath());
//删除webview 缓存目录
if(webviewCacheDir.exists()){
deleteFile(webviewCacheDir);
}
//删除webview 缓存 缓存目录
if(appCacheDir.exists()){
deleteFile(appCacheDir);
}
}
/**
* 递归删除 文件/文件夹
*
* @param file
*/
public void deleteFile(File file) {
Log.i(TAG, "delete file path=" + file.getAbsolutePath());
if (file.exists()) {
if (file.isFile()) {
file.delete();
} else if (file.isDirectory()) {
File files[] = file.listFiles();
for (int i = 0; i < files.length; i++) {
deleteFile(files[i]);
}
}
file.delete();
} else {
Log.e(TAG, "delete file no exists " + file.getAbsolutePath());
}
}
但是加载淘宝天猫的页面的时候会 出现这样的错误:
解决办法:
webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
// view.loadUrl(request.toString());
return super.shouldOverrideUrlLoading(view, request);
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
super.onReceivedSslError(view, handler, error);
}
});
上一篇: 腾讯X5WebView集成使用