WKWebView loadRequest失败时加载自定义错误htmlString

时间:2015-07-28 02:33:03

标签: ios swift wkwebview

在我的控制器中,我调用了WKWebViewInstance.loadRequest(url)。如果没有可用的Internet,我想在WKWebView中加载错误消息。

我找到了

  func webView(webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: NSError) 
当WKWEbView导航失败且没有互联网连接时,

被调用。当我在上面的委托方法中进行webView.loadHtmlString()调用时,没有任何反应。

如何在发出WKWEbView导航请求时检测到网络连接不存在,并将固定错误消息加载到Web视图中?

我的委托方法代码是

   func webView(webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: NSError) {
    webView.stopLoading()
    webView.loadHTMLString(Constants.OfflineHtmlString!,baseURL:  nil)
}

3 个答案:

答案 0 :(得分:9)

如果需要在未连接到互联网时向用户显示错误信息,

您可以在加载请求之前检查您是否已连接到互联网; Reachability是一种流行的API,通常有助于检查这一点。这里似乎有一个快捷的端口https://github.com/ashleymills/Reachability.swift

我建议采用上述方案;如果您仍想让它失败然后显示错误,请确保OfflineHtmlString的正确性并在加载OfflineHtmlString之前验证错误代码;

我不知道你的html字符串是否有效;如果它有效,我会做类似下面的事情;

func webView(webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: NSError) {
   if(error.code == NSURLErrorNotConnectedToInternet){
       webView.loadHTMLString(Constants.OfflineHtmlString!,baseURL:  nil)
   }
}

答案 1 :(得分:0)

Subbu是正确的 仅适用于swift4

    func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
    print("loading error", error)
    if(error._code == NSURLErrorNotConnectedToInternet){
        loadingLabel.text = "Hit Cancel to return back"
    }
    errorDisplay(error: "Loading error. Please try again later.\(error)")
    spinner.stopAnimating()
    loadingLabel.text = "Hit Cancel to return back"
}

答案 2 :(得分:0)

如果您不设置 loadingHTMLString,则 baseURL 似乎不起作用。如果您没有有效的网址,您可以使用 Data URL

这对我有用:

func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
    if let urlError = error as? URLError {
        webView.loadHTMLString(urlError.localizedDescription, baseURL: urlError.failingURL)
    } else {
        webView.loadHTMLString(error.localizedDescription, baseURL: URL(string: "data:text/html"))
    }
}