7

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 Web ビューに渡す追加のヘッダー フィールドはありますか?

4

3 に答える 3

7

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 など) で機能します。

于 2013-10-23T17:51:04.750 に答える
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 デリゲートを設定する必要があります。

于 2013-10-15T09:48:59.793 に答える
-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];

iOS 7 スクリーンショット

于 2013-10-18T17:11:56.373 に答える