1. 程式人生 > >iOS UIWebView獲取403/404

iOS UIWebView獲取403/404

問題描述

    與WindowsPhone不同,iOS UIWebView並不認為403/404這種情況下頁面訪問是失敗的,這也情有可原,但有時候,我們需要對WebView所遇到的403/404進行處理。

解決思路

    由於WebView在回撥事件,要麼發生在NSURLConnection請求之前:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

        - (void

)webViewDidStartLoad:(UIWebView *)webView;

    要麼發生在NSURLConnection請求之後:

        - (void)webViewDidFinishLoad:(UIWebView *)webView;

        - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;

    這兩種情況下都無法獲取狀態碼,故NSURLConnection必須由我們來完成。然後讓WebView呼叫loadData方式展現頁面,而403/403由我們自己處理。

解決方案

  1. #pragma mark -
  2. #pragma mark - UIWebView Delegate Methods
  3. - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType  
  4. {  
  5.     static BOOL isRequestWeb = YES;  
  6.     if (isRequestWeb) {  
  7.         NSHTTPURLResponse *response = nil;  
  8.         NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];  
  9.         if (response.statusCode == 404) {  
  10.             // code for404
  11.             return NO;  
  12.         } elseif (response.statusCode == 403) {  
  13.             // code for403
  14.             return NO;  
  15.         }  
  16.         [webView loadData:data MIMEType:@"text/html" textEncodingName:nil baseURL:[request URL]];  
  17.         isRequestWeb = NO;  
  18.         return NO;  
  19.     }  
  20.     return YES;  
  21. }