UIWebViewと独自スキームを利用する場合の注意
仕事でとあるiPhoneアプリを作っていたときにハマった。
UIWebViewで表示するWEBページに、独自スキームを指定したリンクを設置していた。リリース直前の動作確認で、そのリンクが反応しないことが判明。
didFailLoadWithErrorでエラーの詳細を見てみると、エラーコード101が出力されている。
プロジェクトの指定を確認したりしたが問題なく、またSafariで開く場合は問題なかったので、アプリの実装に問題があるのではないかとコードを確認した。
原因は、UIWebViewのshouldStartLoadWithRequestを実装していたため。どうも独自スキームを定義する場合は、ここでYESを返してはいけないらしい。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if ([request.URL.absoluteString hasPrefix:@"***://"]) { [[UIApplication sharedApplication] openURL:request.URL]; return NO; } return YES; }
ただ、NOを返すだけではダメらしく、Safariで開くようにしてようやく解決。