2013-10-10 15 views
7

Załaduję różne typy plików, takie jak PDF, Excel, Doc itp. W widoku UIWebview. Niektóre pliki wymagają autoryzacji i przekazują wartość w nagłówku.Nie można załadować pliku (dokument, pdf itp.) Z adresu URL w przeglądarce UIWebview dla ios 7

Działa to dobrze w ios 6. Nie działa w ios 7. Poniżej znajduje się kod i komunikat o błędzie.

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

Komunikat o błędzie:

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

Czy istnieje dodatkowe pole nagłówka, aby być przekazywane do iOS 7 widzenia internetowej?

+0

Niektóre problemy tutaj, próby załadowania pliku PDF z Amazon S3. Mój plik ma poprawne rozszerzenie .pdf, jak wspomniano tutaj http://stackoverflow.com/questions/1482736/frame-load-interrupted-error-while-loading-a-word-document-in-uiwebview. –

+0

Spróbuj tego: NSString * strP = [[NSString alloc] initWithContentsOfFile: htmlFileP kodowanie: encodingP błąd: nil]; [self.webviewP loadData: [strP dataUsingEncoding: encodingP] MIMEType: @ "text/html" textEncodingName: @ "UTF-8" baseURL: urlP]; – itechnician

+0

Nie jestem pewien, w którym momencie pojawia się błąd. Czy wywołasz metodę loadRequest: na swojej stronie internetowej, przekazując self.request? Czy to dzieje się, gdy pojawia się błąd? – TomSwift

Odpowiedz

3

Znalazłem rozwiązanie. Nie idealne, ale działa!

Ustaw pamięć podręczną wspólnego adresu URL przed załadowaniem żądania, a następnie przechwyć błąd i załaduj dane z pamięci podręcznej z właściwym typem MIME do przeglądarki internetowej ręcznie.

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

A potem

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

Naturalnie, trzeba ustawić delegata WebViews gdzieś umieścić powyższą metodę delegata.

-1

Ten kod działa dobrze w iOS 7, załączony zrzut ekranu. Nadzieję, że to pomaga ...

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 Screenshot

+1

To nie działa z moich plików z jakiegoś powodu. Wydaje mi się, że moje pliki i serwery są w jakiś sposób wyjątkowe. –

5

starałem się rozwiązać problem z roztworu NSURLCache ale nie dla mnie.

Trzeba próbować dalej:

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

pracować dla wszystkich plików, które nie pracowały wcześniej (pdf, doc, itp).

Powiązane problemy