IOS webView断网空白页判断
最近项目中出现一个困扰许久的问题, 加载webView 的时候, 如果突然断网或者信号不好的时候会出现白屏现象.
1. 如果断网, 加载webView, 走代理 didFailLoadWith 方法比较简单, 直接在 代理方法加载一个按钮点击重试或者重载一下就可以了. 这边不在展开介绍了.
2. 如果走 webViewDidFinishLoad 代理方法, 这个就比较棘手了. 下面我着重介绍一下.
思路一: 加载中断网可能会出现白屏, 也可能不出现(加载完成, 并web界面渲染完毕). 开始我从请求参数开始着手, 看是不是因为断网了, 参数跟正常请求参数不一致来判断是否白屏, 但是在webViewDidFinishLoad方法里面获取的 webView.request 的各项参数(url, body, value等等), 正常加载, 异常加载都一样. 没有区别. 无法判断是否是白屏, 只能在界面上看到是否为白屏. 这个思路 not workable .
思路二: 既然我从 加载webview的方法中无法判断, 是否白屏, 那么就反过来考虑下手. 从H5界面白屏现象分析. 正常界面, H5界面有内容, 白屏无内容. 那么我判断当前界面是否为白屏, 就可以直接取我 "加载完成" 的H5界面 body有无内容不就可以了吗? 如果 H5的body节点内容为 "" 这个就是白屏, body 不为空. 就不是白屏(当然除外极少个别H5界面, 如全图片的web界面, body本身不纯在的不适用, 绝大部分的H5界面是有body内容的). 这样去尝试了一下,可以判断,解决了我的问题. 方法如下: let body = webView.stringByEvaluatingJavaScript(from: "document.body.innerText") ?? "" as String