webview 中的NSURLErrorDomain Code=-999处理

2019-03-05 11:25:12 浏览数 (1)

摘要:替换UIWebview为WKWebview时,遇到一个怪异的现象,webview的二级界面回到一级界面时,一级重新渲染时,会直接抛错;

分析问题:

因为,我们的app支持iOS8以上,考虑到UIWebview的内存使用要比WKWebview的高、加载速度慢,同时,对WKWebview的高达60fps的滚动刷新率以及内置手势充满了羡慕,所以脑袋一抽,撸起袖子直接替换掉原来的UIWebview;这个过程中出现了这个莫名其妙的问题(进入一个H5加载的界面,点击内容,跳转到另外一个H5界面,然后,点击H5的导航返回按钮,上重新加载上一个界面,直接告知加载失败); 加断点,打印出来的error信息是:

代码语言:javascript复制
Error Domain=NSURLErrorDomain Code=-999 "(null)" UserInfo={NSErrorFailingURLKey=https://xxx.xx.xx/me.jsp, _WKRecoveryAttempterErrorKey=, NSErrorFailingURLStringKey=https://xxx.xx.xx/me.jsp}

然后,Google了一圈没有找到合理的解释,于是去查看NSURLError中-999代表的是什么:

图片.png

图片.png

-999 就是 NSURLErrorCancelled,它代表请求被取消的意思

问题原因:

出现NSURLErrorDomain Code=-999的根本原因是什么呢?其实就是因为webview在之前的请求还没有加载完成,下一个请求发起了,此时webview会取消掉之前的请求,因此会回调到失败这里。 因此,在处理Webview的加载失败的回调时,要注意拦截掉被取消的请求。

解决方案:

在失败的方法里:

0 人点赞