欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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加载H5

解决办法:

    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);
            }
        });
相关标签: webview