WKWebView 对 503 错误没有反应

WKWebView doesn't react to 503 error

我正在 WKWebView.

中加载 url 请求

Charles 向我展示了 Response Code: 503 Error 这很好,因为它应该不可用,但是

webView(_:didFail:withError:) 
webView(_:decidePolicyFor:decisionHandler:)

永远不会调用函数。

我应该如何处理这个错误响应?我认为代表设置得当。

import UIKit
import WebKit

class WebKitViewController: UIViewController, WKUIDelegate, WKNavigationDelegate {

    var urlRequest: URLRequest?

    var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()
        webView.navigationDelegate = self

        if let urlRequest = urlRequest {
            webView?.load(urlRequest)
        }
    }

    override func loadView() {
        super.loadView()
        webView = WKWebView(frame: .zero)
        view.addSubview(webView)
        webView.uiDelegate = self
        //constraints
    }

    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
    }

    func webView(_ webView: WKWebView, didFinishProvisionalNavigation navigation: WKNavigation!) {
    }

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    }

    func webView(_ webView: UIWebView, didFailLoadWithError error: Error) {
        //not called while request gets 503 error
    }

    func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
        //not called while request gets 503 error
    }
}

编辑: func webView(_ webView: UIWebView, didFailLoadWithError error: Error) 完全是错误的。跳过那个。

使用此代码检查错误

  optional func webView(_ webView: WKWebView, 
  decidePolicyFor navigationResponse: WKNavigationResponse, 
  decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void)

它会为你提供navigationResponse 并检查它是 503 还是 401 或其他任何内容并进行相应处理。

检查这个 link 了解更多 Link

希望对您有所帮助!

对于您使用的一种方法,您使用 UIWebView 而不是 WKWebView。考虑添加以下方法:

func webView(WKWebView, didFail: WKNavigation!, withError: Error)
func webView(WKWebView, didFailProvisionalNavigation: WKNavigation!, withError: Error)