如何为WKWebview添加超时

时间:2015-11-05 07:09:54

标签: ios wkwebview

如果没有为WKWebView调用默认代理,如何为didFailNavigation编写超时处理程序。

WKWebView代表已设置& DidFinishNavigationdidFailProvisionalNavigation被调用。

4 个答案:

答案 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)

一种可能的解决方案是添加自定义计时器,该计时器在您调用loadHTMLloadRequest方法时开始,并在自定义时间间隔内超时

答案 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
}