Android加载本地HTML的方式

一、需求:

后台说加载HTML的包时间太长,太卡,让把所有的HTML包放到前台;
在之前处理iOS的时候,使用的是file://协议,有些内容和样式加载不出来,H5那边说需要用http://协议来加载;
所以在iOS上就采用搭建本地服务器,通过本地服务器设置的端口号加载本地的HTML文件路径;

二、处理过程:

安卓最简单的加载本地HTML的方法是:webView.loadUrl("file:///android_asset/HtmlFileTT/index.html");
加载之后,发现与iOS的情况一样,也是有些内容和样式加载不出来;
然后我也打算用iOS搭建本地服务器的这个思路,所以使用了nanohttpd,但在加载本地HTML路径上,水平不够,没能实现。
最后咨询了其他安卓大牛,发现问题很好解决,主要是是因为本地HTML里面有跨域的请求 但是原生webview需要设置之后才能实现跨域请求;解决方法是设置WebSettings,代码如下:

 try {//本地HTML里面有跨域的请求 原生webview需要设置之后才能实现跨域请求
            if (Build.VERSION.SDK_INT >= 16) {
                Class clazz = webView.getSettings().getClass();
                Method method = clazz.getMethod(
                        "setAllowUniversalAccessFromFileURLs", boolean.class);
                if (method != null) {
                    method.invoke(webView.getSettings(), true);
                }
            }
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        webView.loadUrl("file:///android_asset/HtmlFileTT/index.html");
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                return super.shouldOverrideUrlLoading(view, request);
            }
        });

PS 还有一个问题

因为刚接触Android,在一开始用webView.loadUrl("file:///android_asset/HtmlFileTT/index.html"); 加载本地HTML文件时,加载出来的文字都是那种HTML的代码,一开始以为是编码格式的问题,
webView.getSettings().setDefaultTextEncodingName("utf-8");//文本编码
通过上述方法设置发现还是没有解决问题,最后加上下面这句才解决问题:

webView.getSettings().setDefaultTextEncodingName("utf-8");//文本编码
webView.setDomStorageEnabled(true);//设置DOM存储已启用(注释后文本显示变成js代码)

你可能感兴趣的:(Android加载本地HTML的方式)