如果没有为WKWebView
调用默认代理,如何为didFailNavigation
编写超时处理程序。
WKWebView
代表已设置& DidFinishNavigation
或didFailProvisionalNavigation
被调用。
答案 0 :(得分:13)
使用 didFailProvisionalNavigation 创建的错误的 error.code 值并添加您的'处理程序'代码那里:
func webView(webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: NSError) {
if error.code == -1001 { // TIMED OUT:
// CODE to handle TIMEOUT
} else if error.code == -1003 { // SERVER CANNOT BE FOUND
// CODE to handle SERVER not found
} else if error.code == -1100 { // URL NOT FOUND ON SERVER
// CODE to handle URL not found
}
}
答案 1 :(得分:1)
使用此委托方法
webView:didFailProvisionalNavigation:withError:
文档
在开始加载主框架数据时发生错误时调用。
并检查错误代码
NSURLErrorTimedOut = -1001
所有错误code list
答案 2 :(得分:0)
一种可能的解决方案是添加自定义计时器,该计时器在您调用loadHTML
,loadRequest
方法时开始,并在自定义时间间隔内超时
答案 3 :(得分:0)
与Timer
相比,asyncAfter(deadline:)
的重量更轻。
var isTimeOut = true
DispatchQueue.main.asyncAfter(deadline: .now() + timeOut) {
if isTimeOut{
// do time out thing
}
}
根据isTimeOut
检查WKNavigationDelegate
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!){
isTimeOut = false
}