A Day In The Life

とあるプログラマの備忘録

UIWebViewにJSのライブラリを動的に読み込ませる方法

UIWebView で表示している HTML ページに Javascript ライブラリを動的に読み込ませる方法です。
使う場面はそうないと思いますが、興味本位で試してみたらできたので記事にしました。Google Libraries API という Javascript のライブラリを使うと簡単に出来ます。
下記は Google Maps のライブラリを動的に読み込んで位置情報を取得するサンプルコードです。

@interface SmapleViewController {
  UIWebView *webView;
}
@property (retain, nonatomic)IBOutlet UIWebView *webView;
@end

@implements SmapleViewController

@synthesize webView;

- (void)webViewDidFinishLoad:(UIWebView *)webView {
  NSString *script = @"var script = document.createElement('script');"
                      @"script.src='http://www.google.com/jsapi?key=ABCDEFG&callback=loadLibs';"
                      @"script.type='text/javascript';"
                      @"document.getElementsByTagName('head').item(0).appendChild(script);"
                      @"function loadLibs() {google.load('maps', '3', {'other_params':'sensor=false','callback' : libsLoaded});}"
                      @"function libsLoaded() {navigator.geolocation.getCurrentPosition(function(position){}){});}";
  [webView stringByEvaluatingJavaScriptFromString:script];
}
@end

なお Javascrpt のコードはGoogle AJAX API Loaderと AJAX Libraries APIを参考にしました。
サンプルでは Google Maps API を読み込ませましたが他にも以下のライブラリが使えます。