IPhoneアプリケーションにWebビューがあり、Resourcesフォルダー内にいくつかのhtmlファイルもあります。アプリが読み込まれると、リソースからWebビューにページが読み込まれます。ただし、他のリソース(画像、その他のhtmlファイルなど)を指すリンクをWebビュー内に作成する必要があります。相対リンクを実行するだけでは機能しません。
<a href="OtherPage.html">Doesn't work</a>
これらのリソースをロードするときは、ベースURLを設定する必要があります。次の方法を使用してこれを行うことができます。
- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL
...ここで、baseURLはリソースフォルダのファイルURLになります。
iPhone OS3.0用のiPhoneSDKリリースノート によると、どうやらちょっとした落とし穴があります:
問題:UIWebViewは、3.0に対してビルドされたアプリにローカルリソースを読み込めません。
[UIWebView loadHTMLString:baseURL:]
を使用する場合、HTML文字列はfile://
スキームでローカルリソースを参照しないでください。代わりに、NULL
またはfile://
のURLをbaseURL:
に渡すか、<style>
および<script>
タグを使用してリソースをHTMLに直接含めます。
けっこうだ。しかし、baseURL
の標準的な問題のfile://
URLを渡すことは完全には機能しません。ただし.../
を//
に変更し、スペースを%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:
が関係するiPhoneOS3.0でうまくいくはずです。
私はそれを修正しました:8月が言ったように私はこれをBaseURLに使用しました:
NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];
ありがとうございました!
このコードは、バンドルのリソースディレクトリにある「OtherPage.html」という名前のファイルのURLを含む文字列を返します。
[[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"OtherPage" ofType:@"html"]] absoluteString]
これは私のために働いた。私の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];
最初にOtherPage.htmlを読み込んでみてください。それができない場合、それはそこになく、プロジェクトに追加することの一部を見逃しています。可能であれば、リンクにタイプミスがあるか、8月に述べられているようにbaseURLが正しくない可能性があります。リソースファイルにある画像を含むhtmlファイルを作成したとき、それを使用するだけで正常に機能しました
<img src="file.png">
たぶんそれはbaseurlと関係があります:私がリソースをロードするとき、私はこの行を使用します:
[webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]];
最後に、baseURL: ""と表示されています。これを取り出すと動作しません(クラッシュ)が、リソースへのパスがわかりません。誰かが.....?
私にとっての問題は、jsファイルがバンドルに含まれていないことでした。必ず確認してください。
OK、ここで3。5年後:) ...上記のMichaelGaylordの提案を正確に試しましたが、5.0、5.1、6.0、6.1のシムでも、同じように動作する実際のデバイスでも機能しませんでした。 ただしthis SOリソースがバンドルされている場所の明確化( ビルド出力はどこに行くのですか? )このように私のためにそれを機能させるのに役立ちました:
プロジェクトがバンドルに含まれるべきであることを次の方法で認識していることを確認します。
だから私がしなければならなかったのはコピーすることだけでした-マイケルのコードを上に貼り付けてverbatumそしてこの1行を変更してください:
inDirectory:@"html"]
に:
inDirectory:nil]
およびShaazam!出来た :)
Phonegapがどのようにそれを行うかを見てください。 iPhoneのローカルリソースに関するチュートリアルです 。ステップ11はあなたが無視していることかもしれません。