事前情報
AndroidのChromeアプリでURLスキームを利用して、Androidアプリを起動する際に気をつけるべき、不具合?仕様?があるので忘れないためというのと、記事がどこにもなかったため他にそのパターンに出会う人がいた時のために記事にしておきます。
あらかじめ書いておくと、ここに不具合なのか仕様なのかはわかっていません。またそれに対する回避方法などもわかっておりません。
ただ、意図しない挙動が起こるという事実だけを記載します。
ちなみに1週間ずっと悩んだ挙句答えに辿りつきませんでした。。。。
概要
AndroidのアプリをChromeブラウザアプリから起動させる際にURLスキームを利用するとブラウザバックが起こるという内容です。
ブラウザバックが起こるパターン
前提条件
OS Android
ブラウザ Chrome
画面A/画面B 2つ
呼び出すスマホアプリ 1つ
前提条件詳細
- 画面Aには画面Bへの別タブで開くaタグが記載されている
<a href="/screenB.html" target="_blank>画面Bへ</a>
- 画面Bにはアプリを起動するjavascriptが記載されている
<script>
// アプリを起動するURLスキーム
top.location.href = "Inten://~end;";
</script>
手順
- 画面Aにて画面Bへのリンクをクリックする
- 画面Bが表示されると
top.location.href = "Inten://~end;";
が実行されて、アプリが起動する。 - 自動的に画面がブラウザバックし、画面Aに遷移する。
(※target属性に_blankを指定しているため別タブで開かれていうるが、タブが閉じられる。Android全体で使用している戻るボタンのため、動作がPCのブラウザバックと多少違う?)
問題
アプリは起動するが、javascriptにブラウザバックする記述がないにも関わらず、ブラウザバックしてしまう。
Android端末でfirefoxで同様の動作をするとブラウザバックは起らす、iOSでsafariで確認したがブラウザバックは起らなかった。
iOSでのChromeの検証はすることができなかったの。
##所感
かなりの時間を割いて調査したが、有力な情報は手に入らなかった。
AndroidのChromeは安定しないと思っている方もいるらしい。バグなのか、何かしらのセキュリティにひっかかる動作のためなのか。
同様の事象で困っっている人がいるのをstackoverflowで発見できたため、自分の環境特有のものではないことを確認した.
safriとfirefoxで起らないということはバグではないかと思っている。