18

iPhone アプリケーションに webview があり、Resources フォルダー内にいくつかの html ファイルもあります。アプリが読み込まれると、リソースから Web ビューにページが読み込まれます。しかし、他のリソース (画像や他の html ファイルなど) を指すリンクを webview 内に作成する必要があります。相対リンクを実行するだけでは機能しません。

<a href="OtherPage.html">Doesn't work</a>
4

10 に答える 10

26

どうやらiPhone OS 3.0 の iPhone SDK リリース ノート によると、ちょっとした問題があるようです。

問題: UIWebView は、3.0 に対してビルドされたアプリでローカル リソースを読み込めません。

を使用する場合[UIWebView loadHTMLString:baseURL:]、HTML 文字列はfile://スキームを使用してローカル リソースを参照しないでください。代わりに、NULLまたは のfile:// URL を渡すか、およびタグbaseURL:を使用して HTML にリソースを直接含め ます。<style><script>

けっこうだ。しかし、標準発行のfile://URL を渡してbaseURLもうまくいきません。しかし... に変更し、スペースを に変更/すると、設定されることがわかりました! (使用することは非常に理にかなっていますが、二重スラッシュの部分には驚きました。)//%20%20

NSString *markupすでに設定しているとしましょう。これですべてです。(読みやすくするためにここでコードをラップしました。好みに合わせてリファクタリング/調整したい場合があります。)

 NSString *resourcePath = [[[[NSBundle mainBundle] resourcePath]
     stringByReplacingOccurrencesOfString:@"/" withString:@"//"]
     stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
 [webView loadHTMLString:markup baseURL:[NSURL URLWithString:
     [NSString stringWithFormat:@"file:/%@//", resourcePath]]];

CSS、JavaScript、および画像がファイル名だけで参照されているloadHTMLString:baseURL:限り、iPhone OS 3.0 では問題なく動作するはずです!

于 2009-09-08T21:02:21.643 に答える
14

これらのリソースをロードするときは、ベース URL を設定する必要があります。次のメソッドを使用してこれを行うことができます。

- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL

...ここで、baseURL はリソース フォルダーのファイル URL になります。

于 2009-01-26T02:12:07.593 に答える
7

私はそれを修正しました:Augustが言ったように、これをBaseURLに使用しました:

NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];

ありがとうございました!

于 2009-01-26T20:48:51.940 に答える
3

このコードは、バンドルのリソース ディレクトリにある「OtherPage.html」という名前のファイルの URL を含む文字列を返します。

[[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"OtherPage" ofType:@"html"]] absoluteString]
于 2009-01-26T06:02:24.087 に答える
2

これは私にとってはうまくいきました。私の HTML ファイルは、プロジェクトのサブフォルダー (グループではありません) にありました。私の html ページは page01 と呼ばれ、サブフォルダーは html です。

NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
NSString *pathToHtml = @"html";
NSURL *baseURL = [[NSURL alloc] initFileURLWithPath:pathToHtml isDirectory:YES];

NSString *html = [NSString stringWithContentsOfFile:[[NSBundle mainBundle]    
                             pathForResource:@"page01" ofType:@"html"                                                               
                             inDirectory:@"html"] 
                         encoding:NSUTF8StringEncoding error:nil];
[webview loadHTMLString:html baseURL:baseURL];
于 2009-04-26T13:34:53.770 に答える
1

最初に OtherPage.html をロードしてみてください。できない場合は、そこになく、プロジェクトへの追加の一部を見逃しています。可能であれば、8月に述べたように、リンクにタイプミスがあるか、baseURLが正しくない可能性があります. リソースファイルにある画像を含むhtmlファイルを作成すると、使用するだけで正常に機能しました

<img src="file.png">
于 2009-01-26T03:08:17.650 に答える
0

私にとっての問題は、js ファイルがバンドルに含まれていなかったことです。必ず確認してください。

于 2011-12-19T15:10:03.807 に答える
0

OK、ここで3.5年後:) ...上記のMichael Gaylordの提案を正確に試しましたが、5.0、5.1、6.0、6.1のsimでは機能しませんでした-同じように実行されている実際のデバイスでも機能しませんでした。ただし、リソースがバンドルされている場所に関するこの SO の明確化 (ビルド出力はどこに行くのですか? ) は、次のように機能するのに役立ちました。

  1. プロジェクトにFinderフォルダーを作成します(Michaelが示唆するように-そして「グループ」も試しませんでした)
  2. Finderを使用してhtmlをそのフォルダーに配置します
  3. Xcodeでファイルを使用->プロジェクトにファイルを追加
  4. 次の方法で、プロジェクトがバンドルに含まれている必要があることを認識していることを確認します。

    1. ナビゲータウィンドウでメイン プロジェクト ターゲットを右クリックし、
    2. TARGETS が選択されていることを確認し、Build Phasesタブで、
    3. [バンドル リソースのコピー] の三角形をクリックします |>
    4. そして、これがMichaelのものとの違い です.htmlファイルとパスがすでに表示されているはずです。(おそらく、XCoders はファイルの追加 AI を改善しました :)

だから私がしなければならなかったのは、Michael のコードを逐語的にコピーして貼り付け、この 1 行を変更することだけでした。

                     inDirectory:@"html"] 

に:

                     inDirectory:nil]

そしてシャザム!出来た :)

于 2013-03-15T23:17:45.950 に答える
0

Phonegap がどのようにそれを行うかを見てみましょう。これは、iPhone のローカル リソースに関するチュートリアルです。ステップ11はあなたが無視しているものかもしれません。

于 2009-01-26T02:13:46.950 に答える
0

多分それは baseurl と関係があります: リソースをロードするとき、私はこの行を使用します:

[webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]];

最後に、baseURL: "" と表示されています。これを取り出しても機能しません (クラッシュします) が、自分のリソースへのパスがわかりません。誰かがそうしたら……?

于 2009-01-26T03:16:12.270 に答える