2012-03-03

shouldOverrideUrlLoadingとshouldStartLoadWithRequestの違い

AndroidのWebViewのメソッドであるshouldOverrideUrlLoading(WebView, String)と、iOSのUIWebViewのwebView:shouldStartLoadWithRequest:navigationType: は、似たようなことを行いますが、重大な違いがあります。

AndroidのshouldOverrideUrlLoadingは、iframeのURLを読み込むときは呼ばれません。それに対して、iOSのhouldStartLoadWithRequestは、iframeの読み込みでも呼び出されます。

たとえば、自作アプリでexample.comのWebページだけを表示して、よそのページへのリンクはデフォルトのブラウザで表示するという仕様を考えてみます。
こんなときAndroidでは、shouldOverrideUrlLoadingでURLをチェックして、ホストがexample.comでなければIntentを投げるというふうにすれば実現できます。
しかし、iOSのwebView:shouldStartLoadWithRequest:navigationType: で同じことをやると、iframeまでSafariで開こうとしてしまいます。example.comのサイトが更新された場合に、問題を引き起こす可能性があります。
iOSの場合どうすればいいのかは、よくわかりません。

AdSenseなどの広告でiframeを用いている場合もあるので、十分に注意が必要です。

0 件のコメント: