问题描述
与WindowsPhone不一样,iOS UIWebView并不认为403/404这种状况下页面访问是失败的,这也情有可原,但有时候,咱们须要对WebView所遇到的403/404进行处理。html
解决思路
因为WebView在回调事件,要么发生在NSURLConnection请求以前:python
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;web
- (void)webViewDidStartLoad:(UIWebView *)webView;ide
要么发生在NSURLConnection请求以后:spa
- (void)webViewDidFinishLoad:(UIWebView *)webView;.net
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;rest
这两种状况下都没法获取状态码,故NSURLConnection必须由咱们来完成。而后让WebView调用loadData方式展示页面,而403/403由咱们本身处理。code
解决方案
-
-
- - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
- {
- static BOOL isRequestWeb = YES;
-
- if (isRequestWeb) {
- NSHTTPURLResponse *response = nil;
-
- NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
- if (response.statusCode == 404) {
- // code for 404
- return NO;
- } else if (response.statusCode == 403) {
- // code for 403
- return NO;
- }
-
- [webView loadData:data MIMEType:@"text/html" textEncodingName:nil baseURL:[request URL]];
-
- isRequestWeb = NO;
- return NO;
- }
-
- return YES;
- }