摘要:替换UIWebview为WKWebview时,遇到一个怪异的现象,webview的二级界面回到一级界面时,一级重新渲染时,会直接抛错;
分析问题:
因为,我们的app支持iOS8以上,考虑到UIWebview的内存使用要比WKWebview的高、加载速度慢,同时,对WKWebview的高达60fps的滚动刷新率以及内置手势充满了羡慕,所以脑袋一抽,撸起袖子直接替换掉原来的UIWebview;这个过程中出现了这个莫名其妙的问题(进入一个H5加载的界面,点击内容,跳转到另外一个H5界面,然后,点击H5的导航返回按钮,上重新加载上一个界面,直接告知加载失败);
加断点,打印出来的error信息是:
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代表的是什么:
-999 就是 NSURLErrorCancelled,它代表请求被取消的意思
问题原因:
出现NSURLErrorDomain Code=-999的根本原因是什么呢?其实就是因为webview在之前的请求还没有加载完成,下一个请求发起了,此时webview会取消掉之前的请求,因此会回调到失败这里。
因此,在处理Webview的加载失败的回调时,要注意拦截掉被取消的请求。
解决方案:
在失败的方法里: