美文网首页iOS进阶之路111
iOS优化webview加载失败情况

iOS优化webview加载失败情况

作者: 蜡笔小强 | 来源:发表于2017-02-24 15:42 被阅读3036次

经常使用UIWebView(WKWebView iOS8.0开始支持)的同学,肯定有经验,加载失败,webview是空白页,很多用户就会说为什么这样,一片空白,用户不会去管你是网络失败还是什么,他想重新刷新一下也没有入口。对于这种情况,我们可以在网络加载失败后,加载个默认页面。

设计思路和部分代码如下:

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

在代理方法里,监听到失败,就去加载本地一个失败静态html。里面可以做个按钮,点击后重新刷新。效果如下:

加载本地html请求不难,这边点击刷新后的点击事件,需要重新发送之前的请求。这里有2种思路:

1.提供js交互接口。本地网页调用这个接口,原生客户端处理重新loadurl,load之前的url。只需要保持住原先url即可。

2.在load本地失败页面时候,带上失败的url,可以当参数传过去,比如xxx?reloadURL=@"http://www.baidu.com"。然后在本地url里取这个reloadURL,去加载即可。

此方案有个小注意点:如果你遇到加载失败,返回页面不对等,比如利用webview的goback,返回页面不对,那么可以location.replace修改网页中堆栈信息即可。

相关文章

网友评论

  • rainbowboy:这篇文章你可以看一下https://www.jianshu.com/p/e8413e5eec16
    蜡笔小强:顺带说下死循环的是真的坑,:joy: 当年花了好几天研究才知道这个
    蜡笔小强:多谢分享。NSUrlProtocal我也是重度用户,不过我这边失败大多是服务器自身服务挂了导致。Protocal,我监听后有特殊操作,需要针对业务形态做不同处理。JS交互也是通过Protocal,再增加失败处理这边的逻辑有点太多了。不过你这个是个很好的思路,感觉很适合互联网化的产品。我这个app作为平台,接入的服务商来自各种服务器,由平台做就不大合适了。

本文标题:iOS优化webview加载失败情况

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