在我的控制器中,我调用了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)
}
答案 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"))
}
}