摘要:替換UIWebview為WKWebview時渐苏,遇到一個怪異的現(xiàn)象,webview的二級界面回到一級界面時菇夸,一級重新渲染時琼富,會直接拋錯;
分析問題:
因?yàn)樽拢覀兊腶pp支持iOS8以上鞠眉,考慮到UIWebview的內(nèi)存使用要比WKWebview的高、加載速度慢择诈,同時械蹋,對WKWebview的高達(dá)60fps的滾動刷新率以及內(nèi)置手勢充滿了羨慕,所以腦袋一抽羞芍,擼起袖子直接替換掉原來的UIWebview哗戈;這個過程中出現(xiàn)了這個莫名其妙的問題(進(jìn)入一個H5加載的界面,點(diǎn)擊內(nèi)容荷科,跳轉(zhuǎn)到另外一個H5界面唯咬,然后纱注,點(diǎn)擊H5的導(dǎo)航返回按鈕,上重新加載上一個界面胆胰,直接告知加載失斈);
加斷點(diǎn)蜀涨,打印出來的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勉盅,它代表請求被取消的意思 ?
問題原因:
出現(xiàn)NSURLErrorDomain Code=-999的根本原因是什么呢佑颇?其實(shí)就是因?yàn)閣ebview在之前的請求還沒有加載完成,下一個請求發(fā)起了草娜,此時webview會取消掉之前的請求挑胸,因此會回調(diào)到失敗這里。
因此宰闰,在處理Webview的加載失敗的回調(diào)時茬贵,要注意攔截掉被取消的請求。
解決方案:
在失敗的方法里: