0

を含むアプリケーションでの作業UIWebView。基本的な質問:-Ui Webviewはサファリとまったく同じように動作しますか?

最後のシナリオは、ui webviewを使用してWebアプリを表示することです。一部のページはオフラインモードで動作させることができます。のように、ユーザーはオンラインになります-> Webページを閲覧します。これで接続がなくなり、safariはキャッシュからWebページをロードできます。そのページに対して行われた設定に従って。(マニフェストファイル)。

ただし、このシナリオは、を使用している私のアプリケーションでは機能しませんUIWebView。ASIHttpリクエストを使用して、プロキシをバイパスし、資格情報を提供しています。

このオフラインシナリオは、使用するUIWebViewキャッシュ手法を使用してどのように処理できますか?コードサンプルを提供してください。これでいくつかのコードサンプルを見つけるのが難しいと感じています。

使用されるコードは次のとおりです:-

ASIHTTPRequest *request1 = [ASIHTTPRequest requestWithURL:navigationURL];


    [request1 setDownloadCache:[ASIDownloadCache sharedCache]];

    [[ASIDownloadCache sharedCache] setShouldRespectCacheControlHeaders:NO];

    [request1 setCachePolicy:ASIOnlyLoadIfNotCachedCachePolicy];

    [request1 setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];



    [request1 setDownloadDestinationPath:
     [[ASIDownloadCache sharedCache] pathToStoreCachedResponseDataForRequest:request1]];


 // ************   Network Status check   

 NetworkStatus status = [self.retrive1.internetreachbility currentReachabilityStatus];


    if (status == ReachableViaWiFi || status == ReachableViaWWAN) {

        [[ASIDownloadCache sharedCache] clearCachedResponsesForStoragePolicy:ASICachePermanentlyCacheStoragePolicy];        
    [request1 setShouldPresentProxyAuthenticationDialog:YES];
    [request1 setShouldPresentCredentialsBeforeChallenge:YES];
    [request1 setShouldPresentAuthenticationDialog:YES];
    [request1 setUsername:retrive1.username];
    [request1 setPassword:retrive1.password];

    [request1 setDelegate:self];

        [request1 setDidFinishSelector:@selector(webPageFetchSucceeded:)];

    [request1 startAsynchronous];

    }


    else

    {

        NSLog(@"app is offline");


        [request1 useDataFromCache];

        BOOL success = [request1 didUseCachedResponse];
        NSLog(@"------------>>>>>>> Success is %@\n", (success ? @"YES" : @"NO"));


        off_status.text = [NSString stringWithFormat:@"Success is %@", (success ? @"YES" : @"NO")];


// Not using this method .

        *NSData *responseData = [request1 responseData];

   [web loadData:responseData MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:nil];*



// Using this method 

        NSString *response = [NSString stringWithContentsOfFile:       
                              [request1 downloadDestinationPath] encoding:[request1 responseEncoding] error:nil];

    [web loadHTMLString:response baseURL:nil];

    }

キャッシュからのデータを使用すると、画像が表示されません。

4

2 に答える 2

1

UIWebViewサファリに似ていません。Safari は本格的な Web ブラウザーですが、webView は必要最小限のものです。特に、Objective-C コードから JavaScript を操作するのは非常に面倒です。

オフライン ブラウジングのようなことを行うには、独自に実装する必要があります。ObjectiveCレイヤーでそれを行うか。つまり、最初に Objective-C を使用してコンテンツをダウンロードし、それをローカル キャッシュに保存してから、コードを uiwebview にスローします。次回オフラインでキャッシュからロードするとき。

または、javascript を使用してこれを試すこともできます。uiwebviewは HTML5 をサポートしているので、実際に使ってみてLocalStorage、その動作を確認できます。私の信念は、ハッキーに見えるということです。詳細はこちら -ネイティブ iPhone アプリから UIWebView ローカル ストレージ データにアクセスする

于 2012-12-06T18:17:03.127 に答える
0

WebView と Safari の比較に関するいくつかの質問と回答が役立つ場合があります。

Does UIWebView use the same JavaScript engine as Mobile Safari?

UIWebView には Nitro Javascript エンジンがないため、Mobile Safari よりも JS の実行が遅くなります。だから、それは同じではありません。

Also, does UIWebView support all HTML5 features like Mobile Safari does? I am specifically concerned about Web SQL and Web Workers

これについてはわかりません。おそらくそうではありません。少なくとも UIWebView は、特定の機能に関して Safari よりも少し厳密です。例: JS を使用して幅/高さのスタイルを設定する場合、数字の後ろに「px」を追加する必要がありますが、Mobile Safari では必要ありません。

If I have an app which is written purely in HTML and JS, should I wrap it up in a UIWebView or should I have it open in Mobile Safari

App Store でアプリをリリースする場合は、ラップする必要があります。そうでない場合は、特にする必要はありません。

Are pure HTML and JS apps accepted on the Apple store?

巻けば、そうです。しかし、それにはいくつかの制限があります....

于 2012-12-20T06:53:12.630 に答える