【原创】踩webView加载html源码的坑
来源:互联网 发布:找一份网络兼职 编辑:程序博客网 时间:2024/06/08 13:24
前言
对与移动端开发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代码的全局变量
@Overrideprotected 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,且没有牵涉到具体的业务逻辑的情况下的代码,希望大家可以提出宝贵的意见或建议。
阅读全文
0 0
- 【原创】踩webView加载html源码的坑
- 【原创】踩webView加载html源码的坑
- iOS WebView加载本地HTML的方法
- webview 加载HTML控制图片的大小
- webview加载html的离线缓存
- webview加载html格式的文本
- webView加载html格式的字符串
- Android WebView加载字符串类型的HTML
- WebView加载html后的JS交互
- WebView加载服务器返回的html数据
- ios-webView去加载静态的html
- Android webview加载iframe标签的HTML
- WebView加载assets文件夹下的html
- Android显示webview加载的网页源码
- webview加载html
- WebView加载本地HTML
- webview 加载本地html
- webview加载html内容
- 递推关系中的数列通项
- .net 中小型研发团队架构实践三要点
- cocos-js 自动绑定C++(2)代码部分
- Android中Handler引起的内存泄露
- 两个链表的交叉-LintCode
- 【原创】踩webView加载html源码的坑
- Spark调优简单总结
- 编译异常
- SimpleAsyncTaskExecutor(源码)简单的异步任务支持限流,ListenableFutureTask支持注册事件->FutureTask的继承
- 在Android Studio中引用第三方库
- Linux 测试工具uload测试AE部分
- iOS cell分割线不能占据整个屏幕宽度解决方案
- 设计模式之《抽象工厂方法模式》
- 机器学习初探