Google

2013年8月28日水曜日

iOSウェブアプリホーム画面登録時

あまりブログを書く時間が無いので小ネタを一つ。


iOSのホーム画面に登録して遊ぶタイプのWebアプリケーション(HTML)を作る際の話。
バーを消すとか、サイズを合わせるとか、ググればすぐ出てくるテクニックは置いときます。

ググってもでてこない、最も困るホーム画面の挙動はキャッシュです。

とにかくSafariを再起動しようが、Safariのキャッシュを消そうが、OSを再起動しようが全くダメ。
最も謎挙動だと思うのは、Safari側からそのページをわざわざ開き、リロードして、画面が変わっているのを確認した後でホーム画面から起動すると、何故か全く変わっていない点。
どうやら別のプロセスというか内蔵された1アプリとして動き、MobleSafariとは別のキャッシュを使用しているのではないでしょうか。

で、これをどうやって回避するか。
昔、Flashでブラウザのガチャを作っていた際、カスタマイズされたブラウザに埋め込まれたswfのキャッシュ制御で同様のテクニックを使ったのですが、これがそのまま使えることが分かりました。

その方法とは、HTMLからCSSとJavaScriptを読み込む際に、URLの最後にGETのような引数を付ける事です。

 例:
 href="style.css?version=20130628"

これを使うと、何故か本体側のHTMLまで更新が及びます。
さらにバージョンアップしてキャッシュクリアが必要なら、上記のversionの次の値を変更するだけ。
このversionという文字や、日付の形式こだわる必要はなく、ファイル名の後ろに付けた引数が以前と違う場合、ブラウザ側でキャッシュを無効化してくれるという挙動である模様。
一応手元にあるiOS5や6で普通に動いてくれてます。

ちなみにファイル名を変更しても効果はあります。
が、さすがに毎回それも宜しくないでしょうし、こちらの方が簡単かと。

0 件のコメント:

コメントを投稿