その8とその9で、「アプリ上のリンクをタップして外部サイトに移動したら元のアプリに戻れない」という記事を書きましたが、これを回避する事に成功したので、久し振りにこのネタを再開しようと思います。
dreamweaverでiPhoneアプリをビルドした際に、xxx.yyy.zzz_iOSという感じの名前のディレクトリが生成されているはずです(xxx.yyy.zzzは、プロジェクト作成時に自分で決めた名前)。
この中にあるzzz.xcodeprojというファイルを開くと、dreamweaverで作成したプロジェクトがXcodeで開かれます。ここで、zzzAppDelegate.m の65行目付近にあるメソッドを以下の様に変更します(残念ながらjavascriptで解決する方法が見つからず、今回ついに Objective-C のコードを書く事になってしまいました)。
/** * Start Loading Request * This is where most of the magic happens... We take the request(s) and process the response. * From here we can re direct links and other protocalls to different internal methods. */ - (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { // 追加(ここから) NSString* scheme = [[request URL] scheme]; if([scheme compare:@"http"] == NSOrderedSame) { [[UIApplication sharedApplication] openURL: [request URL]]; return NO; } // 追加(ここまで) return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ]; }
上記の変更を行うと、アプリ上で”http://~”となっているリンクをタップしてもリンク先がsafariに表示される様になり、「アプリの画面が他のサイトになってしまって元に戻れない」という問題が起きなくなります。
ちなみに、その8で行った小細工は不要ですので、試してみる場合は、その7で作成したソースをベースにしてください。
(その11に続く?)