真面目なブログはこっち 👉 blog.s64.jp

Android 4.4.x (API 19) にはiframe内anchorに挙動差異のあるバージョンが混在している

Android 4.4.2(とそれ以下)のWebView内でiframeに含まれるWebページ内のAnchorクリックをしても、ページの遷移イベントを取れない時がある。
具体的には、通常WebViewでは画面遷移時に WebViewClient#shouldOverrideUrlLoading というコールバックが叩かれるのだが、これが動かないパターンがある。

いくらか確認してみたところ、これはtarget属性によって挙動が変わっている模様。たとえば

<a href="https://example.com" target="_blank">_blank</a>

というリンクの場合、WebView内のさらにiframen内で遷移してしまう。

対し下記の場合、

<a href="https://example.com" target="_top">_top</a>

ちゃんと期待どおり WebViewClient#shouldOverrideUrlLoading が呼ばれる。

この挙動チェックはGitHubにサンプルアプリを置いた。

github.com


(Android 4.4.3環境が手元にないので)Android 4.4.4で同じ挙動を確認すると、どちらのリンクも期待どおりWebViewClient#shouldOverrideUrlLoadingが呼ばれる様になっている。

4.4.3はわからないが、少なくとも 4.4.2 と 4.4.4 の間には挙動の差異が存在する。


なお、4.4.xにおけるWebViewの挙動差異は他にも存在して、たとえばPromiseが4.4.2までは存在しないのに対し、4.4.3からは利用できたりする。

h.s64.jp

上記記事に記したとおり、内部のChromiumバージョン変更が行われており挙動にいくつかの差異が発生しているのが実態のようだ。