您的位置:首页 > 移动开发

【原创】踩webView加载html源码的坑

2017-09-16 11:23 417 查看



【原创】踩webView加载html源码的坑


前言

对与移动端开发WebView的开发是必不可少的,关与webView 的一些常规使用大家可以参照  WebView·开车指南 

今天在这里讲的是一个WebView加载html的一个大坑,具体现象描述就是webView加载html之后,点击内部的超链接,跳转…… ,然后回退到之前html的时候页面一片空白,

也不会像加载网页之后,也不显示用户该页面加载失败,实在把我恶心坏了。吐槽之后,我们想想如何解决这个问题呢?


思路

WebView加载html代码绝大多数情况下,只会加载一次且是刚进入页面的时候进行加载,而我们页面加载的异常bug,就是WebView.goBack()的时候回退到webView的初始状态时,html代码在内存中已经被回收了,看到这里我们的思路就来了:


1.当WebView加载html代码时,我们将这个html代码,设置一个变量把html代码保存起来

private  String  mHtml;   //  webView内部html代码的全局变量
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle)
loadDataUrl(this, mWebView);

}

/**
* 加载html
* @param activity
* @param webView
*/
public void  loadDataUrl(Activity activity, WebView webView){
String html = activity.getIntent().getStringExtra(WebActivity.HTML);
LogUtil.e(WebActivity.TAG, "html=====>" + html);
if (TextUtils.isEmpty(html)) {return;}
webView.loadDataWithBaseURL(null, html, "text/html", "utf-8",null);
mHtml=html;  // 将html代码保留在内存中
}


2.WebView回退到初始加载html时候,再次把html源码加载一次


     (1)通过调试我们从webView.getUrl( )这个值中看到了,加载html和加载url 的区别所在


      // 加载html代码时,webView.getUrl()==”about:blank” 这个值可以标识富文本

public static final String HTML_TAG=”about:blank”;


     (2)  回退到初始阶段的时候,重新加html

mWebView.setWebViewClient(new  WebViewClient() {
......
// WebView

@Override
public void onPageFinished(WebView webView, String s) {
.........
WebBackForwardList webBackForwardList=mWebView.copyBackForwardList();        //       获取WebView 加载的历史数据
int index = webBackForwardList.getSize();                                    //       获取堆栈中的历史数据长度
if(mWebView.getUrl().equals(HTML_TAG)&&index>1&&!TextUtils.isEmpty(mHtml)){  //       满足上述bug的条件
mWebView.clearHistory();                                                     //       恢复WebView到初始状态
mWebView.loadDataWithBaseURL(null, mHtml, "text/html", "utf-8",null);        //       重新加载这个情况
}
}
.....

}


小结

上述处理该问题的逻辑,其实不算特别严谨,也是因为解决这个特殊的bug,且没有牵涉到具体的业务逻辑的情况下的代码,希望大家可以提出宝贵的意见或建议。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android webview html