Androidのブラウザでこまる

Canvasがまともに描画されない問題以外にもそれなりにこまることはあって。


Androidのブラウザは放置しておくと(バックグラウンドで別のページ開いても)ページ内容が破棄されてしまう。その復元のされ方も2種類あってまぁこまる。

  • 破棄する前のURLにアクセスする
  • キャッシュは残っていてそのキャッシュからロードされる

Webアプリではなく、静的なページ等ならいいのだけれども、動的なコンテンツはこれは致命的。

まず1つ目はmixiアプリのようなiframeタイプは回避不可能。OAuthの認証期限切れて同じアドレスにアクセスされても困る。対処は不可能。「再読み込みしてください」と表示するのが限界。

2つ目は、クライアント側だけJSやDOMがリセットされてしまうので、クライアント側のデータとサーバー側のデータの同期が取れなくなってしまう問題あり。クライアント側ではJSどころかHTMLも生成せずすべてAjaxで生成するということが必要になってしまう。


これらは不正なアクセスとの見分けも鯖側からはつかないし、不正なアクセスとしてユーザーに返すとたぶんユーザーはびびる。正常な動作やってるのに問題が出てるわけで。

とりあえずやっつけ対応としては「最後のアクセスから時間がたちすぎています。再読み込みしてください」って文言にしておいて逃げるほうがいいのかな。セッション使っていないのにセッション使ってる感じに見えるけど、仕方がない。


iOSだとこの問題はそうそう発生しない模様。少なくともAndroidのように2つURLを開いてブラウジングした瞬間に不具合発生、不具合頻発とかはない。あくまでもAndroidのブラウザはURLを保持しているだけに過ぎない、別ウインドウに切り替えるだけで以前の状態はすべて破棄される可能性が(非常に高い確率で)あるということ。PCのタブブラウザの感覚で使ってはいけない。