最近支持项目的时候,发现一个问题,打开webview的时候,一直弹出自定义的页面,提示网页错误,未响应的问题。因为写了自定义webview加载超时也是显示这个页面,所以在处理bug时,不由的跑歪了方向,最后发现是标题500导致的错误。

本来这个问题,当初搭建webview的时候,在onReceivedError处理过一次,那时候傻傻的在onReceivedError中,以为能获取到相关的错误状态码。就简单的handler处理下,搞了错误的自定义界面。再实际的测试中,却惊喜的发现,实际上不能获取到错误。这是为啥呢。经过一番搜索,发现奥6.0不支持啊。然后查到blog作者提供两种通用的解决方案,一种实在title中获取到404,500等关键字,判断当前是错误了(我就是采取这种。。。说出来都是泪)。因为简单粗暴,且有效,但是未考虑实际开发过程中的错误。第二种就是每次请求时,去通过httpClient,okHttp等等网络框架去发起一次请求,获取其中的状态码。(但实际中 要考虑速度问题)这种方案一开始被我舍弃了。

于是乎,我是万万没有想到,有个webview页面的getTitle获取的标题叫做“500强xxxxxx”,瞬间爆炸,而且坑爹的是,因为采用混合开发,这一开始的标题不一定是最终标题,最终标题需要通过自定义js框架中获取的标题,最终显示的页面是没有“500强xxxx”标题。导致问题的。解决方案,在6.0设备是很容易解决的,因为官方修复了问题,但是4.4 5.0设备就有问题了,看到还有一个做法就是服务器端做处理,他去做页面找不到的问题的解决方案。

这里仅是记录下,遇到这个坑,简单粗暴解决后的遇到的问题经过,以次警示下自己。。。

参考文章:
Android webview处理404、500、断网、timeout页面的问题

标签: none

添加新评论