Android(開発)/ブラウザのリンクの挙動

Android(開発)/ブラウザのリンクの挙動

ブラウザの仕組みかJavaScriptを使ってリクエストを飛ばしたこときの挙動のまとめ

バージョンと製造年月日

2012-03-29

単にリンク

環境:Android 2.3.4 HTC EVO 3D

<a href="https://play.google.com/store/apps/details?id=jp.hoge.piyo.fuga.android.app">ほげ</a>

intent-filterに引っかかって、playとブラウザの選択ダイアログが出てくる。

Playを選べばPlayのアプリが起動して該当のアプリが表示される。

ブラウザを選べば、同一ウィンドウで遷移

単にリンクblank指定

環境:Android 2.3.4 HTC EVO 3D

<a href="https://play.google.com/store/apps/details?id=jp.hoge.piyo.fuga.android.app" target="_blank">ほげ</a>

intent-filterに引っかかって、playとブラウザの選択ダイアログが出てくる。

Playを選べばPlayのアプリが起動して該当のアプリが表示される。

ブラウザを選べば、同一ウィンドウで遷移。blank指定は無視される。まー、blankを無視する環境も普通にあるよということ

href属性値にlocation.hrefで指定

環境:Android 2.3.4 HTC EVO 3D

<a href="javascript:locaation.href='https://play.google.com/store/apps/details?id=jp.hoge.piyo.fuga.android.app';">ほげ</a>

intent-filterに引っかかって、playとブラウザの選択ダイアログが出てくる。

Playを選べばPlayのアプリが起動して該当のアプリが表示される。

ブラウザを選べば、同一ウィンドウで遷移。単にリンクするのと同一の挙動

このような指定の仕方はPCブラウザではJavaScriptの結果が画面に即出てしまってちゃんとした挙動にならないのだがAndroidの場合はだと意図通りに動作する。

実装的に無理しないならaタグにJavaScriptは仕込まないほうがいい。divにonclickでもつけとこう

window.openで指定

環境:Android 2.3.4 HTC EVO 3D

<a href="javascript:window.open('https://play.google.com/store/apps/details?id=jp.hoge.piyo.fuga.android.app');">ほげ</a>

別ウィンドウがまず開きその後intent-filterに引っかかって、playとブラウザの選択ダイアログが出てくる。

Playを選べばPlayのアプリが起動して該当のアプリが表示される。

ブラウザを選べば、開いたウィンドウで遷移。ここでウィンドウ一覧を表示すると元のウィンドウが選択肢に入っている。

開いたウィンドウで戻るボタンを押すと元のウィンドウに戻るのだが戻った後でウィンドウ一覧を出しても開いたウィンドウはもうなくなっていて選択肢に入っていない。

location.hrefをsetTimeoutでキック

環境:Android 2.3.4 HTC EVO 3D

これはちょっと面白い挙動をして、ブラウザで遷移する。intent-filterによる選択肢は出ないという挙動をする。

setTimeoutで使いたいしintent-filterも効かせたい場合の処理

画面遷移処理をsetTimeoutで呼び出し、なおかつintent-filterを効かせたい場合は、 ちょっとトリッキーだが画面遷移先のリンクを無理やり作ってそれを無理やり押すという流れでなんとか実装できた。

Android 2.3.4の標準ブラウザと iOS5.0のsafariで動いた

function hoge(url){
    //リンクを作ってぶら下げる
    var a = document.createElement('a');
    a.href = url;
    var body = document.getElementsByTagName('body')[0];
    body.appendChild(a);
    //クリックイベントを無理やり作って
    var e = document.createEvent("MouseEvents");
    e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
    a.dispatchEvent(e);   //対象に対して発火!
}

タグ

android/dev/android_browser_link_behavior.txt · 最終更新: 2019-11-21 15:48 by ore