Objective-CなどiOS関連の技術メモ。知識はここに投げ捨てて忘れる。

UIWebViewでiframeを含むコンテンツを表示するとshouldStartLoadWithRequestが複数回呼ばれる

最終更新日 2013年12月28日 19:14

UIWebViewがloadRequest:メソッドの実行などによってコンテンツのロードを行うとき、そのロードの前に呼び出されるのがUIWebViewDelegateのwebView:shouldStartLoadWithRequest:navigationTypeメソッドである。戻り値としてNOを返せば、ロードをキャンセルすることができる。

webView:shouldStartLoadWithRequest:navigationTypeを利用するにあたって注意すべきなのは、このメソッドが、(HTTPではなく)文字列でコンテンツを読み込むときや、iframe内のコンテンツを読み込むときにも呼ばれること。iframeがひとつ含まれていると、メインコンテンツ自体とiframeで計2回呼び出されることになる(最低2回。iframeとは別の要因で更に呼ばれることもある)。

そんなときにこれを場合分けして、メインコンテンツの読み込みである場合のみ何か処理をしたいなら、次のように判定すればよい。

詳解 Objective-C 2.0 第3版

必読。こんなゴミサイトより、こっちを読むべき。

Amazonでみる

iPhoneプログラミングUIKit詳解リファレンス

必読。こんなゴミサイトより、こっちを読むべき。

Amazonでみる