IOS UIWebView擷取404、504等錯誤問題解決方案_IOS

來源:互聯網
上載者:User

UIWebView擷取404、504等錯誤碼

問題描述

    在使用webview時,會存在這麼一個問題:
    如果訪問伺服器返回異常,比如404、504這樣的錯誤,需要在native端展示特定的圖片和文案(404、504醬紫的錯誤碼有些不美觀)。那麼,問題就來了,怎樣才能知道webview的訪問出錯了,是什麼錯???

問題分析

    從webview發起請求之後,能夠查看webview載入狀態的就是它的代理了,所以就從各個代理方法著手分析。

 // webview被指示載入內容時調用,返回YES才會進行載入  - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;  // webview已經開始載入一個請求後調用  - (void)webViewDidStartLoad:(UIWebView *)webView;  // webview結束載入請求之後調用  - (void)webViewDidFinishLoad:(UIWebView *)webView;  // 請求載入中發生錯誤時調用  - (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error;

    首先,肯定是從didFailLoadWithError代理方法入手,發現請求到404頁面時,並沒有調用該方法,這是為什麼呢?原來,該方法時載入過程出現問題調用,我們順利的得到了404頁面,就不算載入過程的問題。

    然後,從網上搜尋該問題,發現網友提供的方法都是使用sendSynchronousRequest方法返回NSHTTPURLResponse的狀態代碼進行判斷。可是,又出現了一個警告,sendSynchronousRequest在iOS9以後被棄用了,就用新的方法dataTaskWithRequest代理。

 'sendSynchronousRequest:returningResponse:error:' is deprecated: first deprecated in iOS 9.0 - Use [NSURLSession dataTaskWithRequest:completionHandler:]

    以上是擷取狀態代碼的方式,具體在哪個代理函數中處理,還得再看看:

    通過具體程式碼分析發現,放在shouldStartLoadWithRequest和webViewDid FinishLoad都可以得到相應的狀態代碼,放在webViewDidStartLoad得到的狀態代碼都是0.經過分析發現,調用webViewDidStartLoad方法時,request請求已經發起正在等待伺服器處理結果。

問題解決

    綜上,最終該問題就有兩種處理方式了,分別是sendSynchronousRequest和dataTaskWithRequest。具體代碼如下:

 // 方法一  NSHTTPURLResponse *response = nil;  [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];  NSLog(@"statusCode:%ld", response.statusCode);   // 方法二  NSURLSessionDataTask * dataTask = [[NSURLSession sharedSession] dataTaskWithRequest:webView.request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {    NSHTTPURLResponse *tmpresponse = (NSHTTPURLResponse*)response;    NSLog(@"statusCode:%ld", tmpresponse.statusCode);  }];  [dataTask resume];

    在shouldStartLoadWithRequest和webViewDidFinishLoad方法中都能擷取到該狀態代碼,具體可以根據業務需求確定。

感謝閱讀,希望能協助到大家,謝謝大家對本站的支援!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.