Hatena::ブログ(Diary)

24/7 twenty-four seven Twitter

東日本大震災緊急支援募金募集中。国際NGOワールド・ビジョン・ジャパン

Bloglinesで閲読登録 ADD TO Hatena::RSS Subscribe with livedoor Reader Add to Google

mail address

Follow me on twitter.

iPhone アプリケーション

Hatena touch LDR touch TV Listings LCD Clock MyWebClip MyWebClip LITE  Japan Subway Route Map こころくろっく 英辞郎 on the WEB for iPhone(アルク)
i-Radio くるりんぱ性格診断 英辞郎検索ランキング(アルク) kotobank - コトバンク miil

iPad アプリケーション

LCD Clock HD 「超」整理手帳 for the iPad

共著

2009-12-29

UIWebView を使ってリソースバンドル内の HTML ファイルで、外部 JavaScript や CSS を読み込む

UIWebView を使用して、ローカルに存在する HTML ファイルを表示することができます。

そのとき、凝った表示を行う場合、外部 CSS や JavaScript を使用したい場合があると思います。

f:id:KishikawaKatsumi:20091229055303p:image

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Google Maps JavaScript API v3</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="json2.js"></script>

例えば、上記のように HTML ファイルと JavaScript ファイルがリソースバンドルに存在する場合は、次のように書きます。

NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]]];

要するに、リソースバンドルのファイルパスを URL として渡します。


プログラム内で動的に生成するなど、HTML が文字列の場合は、下記のように、baseURL 引数にリソースバンドルのパスを指定します。

[webView loadHTMLString:htmlString baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];

ただ、 *.js ファイルの扱いには少し注意が必要で、Xcodeデフォルトで *.js の拡張子を持つファイルは、ソースファイルの扱いになり、コンパイルしようとします。

f:id:KishikawaKatsumi:20091229055304p:image

まあ、できないので上記のような警告がでます。


問題は、ソースファイルとして扱われるので、リソースバンドルに含まれないということです。

(Xcode 上はリソースに存在するように見えるが、ソース扱いなので、実際にビルドされたアプリケーションには含まれない)


この問題を解決するには、ターゲットを開いて、ビルドのルールを編集します。

f:id:KishikawaKatsumi:20091229055306p:image


上の図のように、「ソースをコンパイル」というルールの中に、*.js ファイルが含まれているので、ドラッグして「バンドルリソースをコピー」に移動します。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証