Android WebView自定义错误页面笔记

需求:

  WebView加载H5页面遇到错误时,需要修改系统默认的页面,采用自己定制的页面。

解决方案与过程:

1.最开始采用的是webView.loadDataWithBaseUrl加载一段字符串:

String data="<a onClick=\"window.history.back()\" >页面错误,点击刷新</a>";

mWebView.loadDataWithBaseURL("", data, "text/html", "UTF-8", "");

存在问题:由于Android4.4系统更换了浏览器内核(由webkit变为chrome),此时window.history.back()遇到问题(webkit与chrome的back不一致),因此需要修改这种方法。

2.之后尝试了方法二:

String data="<a onClick=\"window.location.replace(\'"+failingUrl+"\')\" >页面错误,点击刷新</a>";

mWebView.loadDataWithBaseURL("", data, "text/html", "UTF-8", "");

存在问题:这种方法规避了window.history.back方法,可是在用户多次点击“刷新”后再后退页面时,会回到错误页面。

3.又尝试了方法三:

String data="<a href=\"javascript:location.reload()\" >页面错误,点击刷新</a>";

webView.loadUrl("javascript:document.body.innerHTML=\"" + sb.toString() + "\"");

使用innerHTML页面不会发生跳转,所以直接调用js的reload方法即可,既规避了history.back方法,用户也不会再次返回到错误页面。

但在Android发布了5.0之后,新的问题又出现了,在webView.loadUrl方法调用时,document.body对象可能为null(偶现)。怀疑是Body标签还没有创建完成就执行了这行js代码,导致问题。

4.最终方案:

 使用自定义View实现错误页面,在出现url加载错误时,通过webview.addView添加到webview上,在back或刷新页面时再将此view删除。

 

转载于:https://www.cnblogs.com/younghome/p/4789727.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值