2013-10-10 10 views
7

Sto caricando diversi tipi di file come PDF, Excel, Doc ecc. In UIWebview. Alcuni file richiedono l'autorizzazione e hanno passato il valore nell'intestazione.Impossibile caricare il file (doc, pdf ecc.) Dall'URL in UIWebview per ios 7

Questo funziona perfettamente in ios 6. Non funziona in ios 7. Di seguito è riportato il codice e il messaggio di errore.

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

messaggio di errore:

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

Esiste un campo di intestazione aggiuntiva per essere passato per iOS 7 vista web?

+0

Alcuni problemi qui, cercando di caricare un PDF da Amazon S3. Il mio file ha l'estensione .pdf corretta come indicato qui http://stackoverflow.com/questions/1482736/frame-load-interrupted-error-while-loading-a-word-document-in-uiwebview. –

+0

Prova come segue: NSString * strP = [[NSString alloc] initWithContentsOfFile: codifica htmlFileP: errore encodingP: nil]; [self.webviewP loadData: [strP dataUsingEncoding: encodingP] MIMEType: @ "text/html" textEncodingName: @ "UTF-8" baseURL: urlP]; – itechnician

+0

Non sono chiaro a quale punto si ottiene l'errore. Chiama loadRequest: sulla tua webview, passando self.request? È così quando si verifica l'errore? – TomSwift

risposta

3

Ho trovato una soluzione. Non perfetto ma funziona!

Impostare una cache di URL condivisa prima di caricare la richiesta, quindi intercettare l'errore e caricare manualmente i dati memorizzati nella cache con il tipo MIME corretto in webView.

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

E poi

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

Naturalmente, è necessario impostare il WebViews delegato da qualche parte si mette il metodo delegato sopra.

-1

Questo codice funziona perfettamente in iOS 7, schermata allegata. Speranza che aiuta ...

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

Questo non funziona per i miei file per qualche motivo. Penso che i miei file e server o ram siano speciali in qualche modo. –

5

ho cercato di risolvere il problema con la soluzione NSURLCache, ma che non ha funzionato per me.

dovete provare prossimo:

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

il lavoro per i tutti i file che non hanno mai lavorato prima (pdf, doc, ecc).

Problemi correlati