美文网首页WebView
Android加载本地HTML的方式

Android加载本地HTML的方式

作者: biyu6 | 来源:发表于2019-03-28 16:36 被阅读0次

    一、需求:

    后台说加载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的方式

        本文链接:https://www.haomeiwen.com/subject/xeqcbqtx.html