読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

Iron RouterとappcacheとUIWebView

appcacheを入れたMeteorのアプリがUIWebViewで動かないことが多々あるという不具合に半年前気がついたのですが、ようやく原因がわかりました。因果関係は置いておいて、原因は、

iOSのUIWebViewやWKWebViewは、window.locationにURL文字列を代入した時、高確率で無視する(locationは変わらないしページ遷移もしない)。

この不具合があるので、パス付きのURLを渡すと、appcacheを使用している場合、ハッシュスタイルのURLへの変換に失敗します。

オールマイティな対策は思いつかないのですが、(ツイートなど)UIWebViewでアクセスするようなURLの場合ハッシュスタイルURLを使っておけば問題は出ないようです。
将来、appcacheを使わなくなっても、Iron RouterはハッシュスタイルURLを解釈してオリジナルのURLにリダイレクトしてくれます。

Meteorは基本重いのでappcacheはできるだけ有効にしたいですね。