menu
書いてる野郎
orebike@gmail.com
ブラウザの仕組みか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のアプリが起動して該当のアプリが表示される。
ブラウザを選べば、同一ウィンドウで遷移
環境: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を無視する環境も普通にあるよということ
環境: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でもつけとこう
環境: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のアプリが起動して該当のアプリが表示される。
ブラウザを選べば、開いたウィンドウで遷移。ここでウィンドウ一覧を表示すると元のウィンドウが選択肢に入っている。
開いたウィンドウで戻るボタンを押すと元のウィンドウに戻るのだが戻った後でウィンドウ一覧を出しても開いたウィンドウはもうなくなっていて選択肢に入っていない。
環境:Android 2.3.4 HTC EVO 3D
これはちょっと面白い挙動をして、ブラウザで遷移する。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); //対象に対して発火! }