0

loadHtmlString メソッドを使用してロードしたい webview があります。問題は、以前にダウンロードした画像で img src を変更できるようにしたいということです。また、html で Google アナリティクスを使用しているため、baseUrl を実際の URL に設定して機能させる必要があります。ここで問題が発生します。baseUrl を入れると、画像が読み込まれません。baseUrl を設定しなければ、機能します。どうすればこれを回避できるので、Google アナリティックスを使用して、画像をアプリケーションにローカルに保存できますか? プロジェクトに Google アナリティクス SDK を実装する必要はありません。

奇妙なことに、シミュレーターで実行し、baseUrl の前に「http://」プレフィックスを付けないと、正常に動作します。ただし、デバイスで実行すると、次のエラーが表示され、機能しません。

Domain=WebKitErrorDomain Code=101 "The URL can’t be shown"

ありがとう

編集

私がこれを行うと、動作します:

[appsWebView loadHTMLString:htmlString baseURL:nil];

ただし、Google アナリティクスを機能させるには、baseURL を提供する必要があります。さらに 2 つのケースがあります。

  1. これにより、上記のエラーが発生します:(シミュレーターでは正常に動作しますが、デバイスで実行するとエラーが発生します)

    [appsWebView loadHTMLString:htmlString baseURL:[NSURL urlWithString:@"test.com"]];

  2. これは単に何も表示しません: (どちらも html 文字列または URL をロードしません)

    [appsWebView loadHTMLString:htmlString baseURL:[NSURL urlWithString:@"http://test.com"]];

4

2 に答える 2

1

ローカルイメージがフルパスを完全に指定していないことが問題であると誤って想定しましたが、ここでは問題ではないようです。baseURLしかし、(やや意外なことに)Webベースを指定したり、HTML文字列でローカル画像を参照したりすることはできないように見えるのはまったく正しいことです。簡単な解決策は私には飛び出していませんが、少なくとも、いくつかの(あまり良くない)オプションがあるようです:

まず、 MikeGallagherのNSData+ Base64カテゴリなどのbase64ライブラリを使用して、ローカルイメージをbase64エンコードできます。例:

NSData *imageData = [NSData dataWithContentsOfFile:imagePath];
NSString *imageDataBase64 = [imageData base64EncodedString];
NSString *imageHtml = [NSString stringWithFormat:@"<img src='data:image/png;base64,%@'>", imageDataBase64];

これにより、最初のレンダリングが遅くなりますが、何もないよりはましかもしれません。

次に、いつでもbaseURLasのままにnilして、Google Analyticsを実行するJavaScriptをHTML文字列から削除してから、を介してそのJavaScriptを挿入してみてくださいstringByEvaluatingJavaScriptFromString。このアプローチは、Google Analytics JavaScriptの複雑さ(たとえば、それが持つ可能性のあるWebベースの参照)に応じて機能する場合と機能しない場合がありますが、その方法で何かを実行できる可能性があります。

問題が些細なimgURLであると想定して申し訳ありません。明らかに、あなたはもっと根本的な問題を特定しました。


元の答え:

HTML文字列に画像のURLを作成して、ローカルファイルシステム内の完全修飾ファイルURLにします。

画像は次のいずれかにありますDocuments

NSString *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *imagePath = [documentsPath stringByAppendingPathComponent:imageName];

またはバンドル内:

NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageName 
                                                      ofType:nil];

ただし、完全に修飾されたパスを取得すると、それを使用できるようになります。

NSURL *imageUrl = [NSURL fileURLWithPath:imagePath];
NSString *imageHtml = [NSString stringWithFormat:@"<img src='%@'>", imageUrl];
于 2012-11-23T17:00:56.537 に答える