2017-07-16 1232 views
4

我正在製作一個網頁瀏覽器,並像每個其他網頁瀏覽器我想通知用戶在網頁加載失敗時發生的錯誤。如何正確實施didFailProvisionalNavigation與WKWebView?

目前,我在didFailProvisionalNavigation方法顯示錯誤的localizedDescription。就這樣!

- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error 
{ 
    [self presentError:error.localizedDescription animated:YES]; 

    [_delegate webViewDidFailNavigation:self error:error]; 
} 

presentError方法處理一些與問題無關的自定義UI東西。

  1. 互聯網連接似乎是脫機:

    的方法,上述用於顯示通常的錯誤,如工作優異。

  2. 無法找到具有指定主機名的服務器。

但它也顯示一些不尋常的錯誤,如:

  1. 操作無法完成(NSURL ErrorDomain錯誤-999)

我不喜歡這方法有兩個原因:

  • 顯示錯誤消息一些技術性的東西「NSURL」,但我可以忽略它。
  • 最重要的是當大多數時候顯示上述錯誤時,網頁是完全可用的,但由於它是didFailProvisionalNavigation錯誤,我必須禁用正在使用的頁面,而是顯示錯誤。

我不知道還有什麼其他小錯誤可能發生,不應該以我處理它們的方式處理。不幸的是,我不知道如何區分諸如「連接似乎脫機」之類的重大錯誤以及諸如「操作無法完成」之類的小錯誤。

處理導航失敗的標準方式是什麼?

回答

0

而不是

webView(_:didFailProvisionalNavigation:withError:) 

你們爲什麼不使用它?

webView(_:didFail:withError:) 

似乎時有錯誤,導致該網站無法顯示內容,而不是當一個頁面已經呈現,並試圖加載下一個頁面,只應調用。

+0

第一種方法實際上表現得應該是這樣。它在適當的時間以所有網址錯誤代碼進行響應。當我用隨機字符串「iasdjfoaskfgo.com」測試它時,didFail:withError:方法沒有引發錯誤「未找到主機」 – Vulkan