无法加载文件(doc,pdf等)从UIWebview中的URL为iOS 7

我在UIWebview中加载不同的文件types,如PDF,Excel,Doc等。 有些文件需要授权,并在头中传递值。

这工作正常在ios 6.不工作在ios 7.下面是代码和错误消息。

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"]; 

错误信息:

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

是否有任何额外的头字段传递给IOS 7networking视图?

我试图解决与NSURLCache解决scheme的问题,但是这并不适合我。

你必须尝试下一步:

  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]; 

它适用于以前没有工作的所有文件(pdf,doc等)。

我有种find解决scheme。 不完美,但它的作品!

在加载请求之前设置一个共享URLcaching,然后拦截该错误并手动将具有正确MIMEtypes的caching数据加载到webView中。

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

接着

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

当然,你必须把你的WebViews委托放在你放置上述委托方法的地方。

这个代码在iOS 7中工作得很好,附有截图。 希望能帮助到你…

 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]; 

iOS 7截图