我在UIWebview中加载不同的文件类型,如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 7网络视图传递任何其他标题字段?
答案 0 :(得分:5)
我试图用NSURLCache解决方案解决问题,但这对我没用。
你必须尝试下一步:
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等)。
答案 1 :(得分:3)
我有点找到了解决方案。不完美但它有效!
在加载请求之前设置共享URL缓存,然后拦截错误并手动将具有正确MIME类型的缓存数据加载到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委托设置为放置上述委托方法的位置。
答案 2 :(得分:-1)
此代码在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];