IOS webView斷網(wǎng)空白頁判斷
最近項目中出現(xiàn)一個困擾許久的問題, 加載webView 的時候, 如果突然斷網(wǎng)或者信號不好的時候會出現(xiàn)白屏現(xiàn)象.?
1.? 如果斷網(wǎng), 加載webView, 走代理?didFailLoadWith 方法比較簡單, 直接在 代理方法加載一個按鈕點擊重試或者重載一下就可以了. 這邊不在展開介紹了.??
2. 如果走?webViewDidFinishLoad 代理方法, 這個就比較棘手了. 下面我著重介紹一下.
思路一: 加載中斷網(wǎng)可能會出現(xiàn)白屏, 也可能不出現(xiàn)(加載完成, 并web界面渲染完畢).? ?開始我從請求參數(shù)開始著手, 看是不是因為斷網(wǎng)了, 參數(shù)跟正常請求參數(shù)不一致來判斷是否白屏, 但是在webViewDidFinishLoad方法里面獲取的?webView.request 的各項參數(shù)(url, body, value等等), 正常加載, 異常加載都一樣. 沒有區(qū)別.? 無法判斷是否是白屏, 只能在界面上看到是否為白屏. 這個思路?not workable .?
思路二: 既然我從 加載webview的方法中無法判斷, 是否白屏, 那么就反過來考慮下手. 從H5界面白屏現(xiàn)象分析. 正常界面, H5界面有內(nèi)容, 白屏無內(nèi)容. 那么我判斷當前界面是否為白屏, 就可以直接取我 "加載完成" 的H5界面 body有無內(nèi)容不就可以了嗎? 如果 H5的body節(jié)點內(nèi)容為 "" 這個就是白屏, body 不為空. 就不是白屏(當然除外極少個別H5界面, 如全圖片的web界面, body本身不純在的不適用, 絕大部分的H5界面是有body內(nèi)容的).? 這樣去嘗試了一下,可以判斷,解決了我的問題. 方法如下: let body = webView.stringByEvaluatingJavaScript(from: "document.body.innerText") ?? "" as String? ?