No es capaz de cargar el file (doc, pdf, etc.) desde url en UIWebview para iOS 7

Estoy cargando diferentes types de files como PDF, Excel, Doc, etc. en UIWebview. Algunos files requieren autorización y pasaron el valor en el encabezado.

Esto funciona bien en ios 6. No funciona en ios 7. A continuación se muestra el código y el post de error.

NSURL *url =[NSURL URLWithString:regularURL]; self.webView.scalesPageToFit=YES; self.request = [NSMutableURLRequest requestWithURL:url]; [self.request setValue:@"multipart/form-data" forHTTPHeaderField:@"Accept"]; NSString *auth = [NSString stringWithFormat:@"Bearer %@",userToken]; [self.request setValue:auth forHTTPHeaderField:@"Authorization"]; 

Mensaje de error:

 Error Domain=WebKitErrorDomain Code=102 "Frame load interrupted" UserInfo=0xd4b5310 { 

¿Hay algún campo de encabezado adicional que se pasará para la vista web ios 7?

Intenté resolver el problema con la solución NSURLCache, pero eso no funcionó para mí.

Tienes que probar a continuación:

  UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; NSString *strUrl = [strUrl stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; NSURL *targetURL = [NSURL URLWithString:strUrl]; NSData *dataFromUrl = [NSData dataWithContentsOfURL:[NSURL URLWithString: strUrl]]; [webView loadData:dataFromUrl MIMEType:@"application/pdf" textEncodingName:nil baseURL:nil]; [self.view addSubview:webView]; 

Funciona para todos los files que no funcionaron antes (pdf, doc, etc.).

He encontrado una solución. No es perfecto, pero funciona.

Establezca un caching URL compartido antes de cargar la request, luego intercepte el error y cargue los datos almacenados en caching con el tipo MIME correcto en la webView manualmente.

 NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:256 * 1024 * 1024 diskPath:nil]; [NSURLCache setShanetworkingURLCache:URLCache]; 

Y entonces

 - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { NSCachedURLResponse* cachedResponse = [[NSURLCache shanetworkingURLCache] cachedResponseForRequest:self.originalRequest]; if (cachedResponse) { CFStringRef UTI = UTTypeCreatePrefernetworkingIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)(cachedResponse.response.URL.pathExtension), NULL); CFStringRef MIMEType = UTTypeCopyPrefernetworkingTagWithClass(UTI, kUTTagClassMIMEType); CFRelease(UTI); NSString* MIMETypeString = (__bridge_transfer NSString *)MIMEType; [self.webView loadData:cachedResponse.data MIMEType:MIMETypeString textEncodingName:nil baseURL:nil]; } } 

Naturalmente, debe configurar su delegado de WebViews en algún lugar donde coloque el método de delegado anterior.

Este código funciona bien en iOS 7, captura de pantalla adjunta. Espero eso ayude…

 UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(10, 10, 320, 480)]; NSURL *targetURL = [NSURL URLWithString:@"http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIWebView_Class/UIWebView_Class.pdf"]; NSURLRequest *request = [NSURLRequest requestWithURL:targetURL]; [webView loadRequest:request]; [self.view addSubview:webView]; 

Captura de pantalla de iOS 7