iOSアプリ内WebViewでページリンクが開かなくなる問題について
この記事はPARONYM Advent Calendar 2019の23日目の記事です。
こんにちは、パロニム技術部雑用担当の大竹です。
今回は、iOSの幾つかのアプリのWebViewで target="_blank"
指定のリンクが開けない問題について書こうと思います。
とある案件のキャンペーンでリリース前検証を行っていた際に、Twitterへシェアされたランディングページからクライアント様のページを開き、ページを閲覧していたところ、リンクをタップしても何も反応しなくなる場合があるとのレポートが上がってきました。
Safariでは問題がないものの、Twitter公式アプリ内WebViewで色々試していると確かにリンクが開けなくなる事がありました。しかもリンクが開ける時と開けないときがあります。
違いが何か調べてみたところ、結論としては target=”_blank”指定されているリンクを2回以上開こうとした時に開かなくなる状態でした。
アプリ内WebViewではタブ切り替えUIが無いので target="_blank"
指定でも通常通りページ遷移しているように見えますが、内部的には別ウィンドウが開いている扱いになっています。
1つは別ウィンドウが開けるのですが、それ以上はウィンドウを開くことが出来ずリンクをタップしても何も反応しないと言う状態に陥ります。
※ 例外として、何故か3D Touchでリンクを押し込んでポップアップ表示のプレビュー経由で開くと2回目以降でも開けます…
他にも幾つかのアプリのアプリ内WebViewで確認してみたところ同じ問題が起きるものがあり、それらに共通しているのはiOSのWebView実装の選択肢のうち SFSafariViewController を利用している(と思われる)ことです。
せめて開けない理由をユーザーに表示してくれれば良いのですが、サイレントで反応しなくなるだけというのが辛い点です。
Webページ側で根本的な解決をする事は出来ないので回避策としてはiOSでは target="_blank"
を使わないようにするぐらいしか無いと思います。
※ SFSafariViewController ではUserAgentがSafariと全く同じでWebページ側では区別がつかないので、 SFSafariViewController 内のときのみ使わないというのは難しいです。
Twitterなどアプリ内WebViewで閲覧される可能性が高いページを作成する際は、 target="_blank"
利用について問題が起きないか頭の片隅に置いておくと良いかと思います。
それでは、また。