manifestファイルとかの続き
Posted: Updated:
制約というか仕様というか
HTML5的にmanifestファイルをゴニョった ( HTML )の続き
そもそもアプリケーションキャッシュって何よ、って話ですがブラウザが勝手にするキャッシュの超強いヤツと捉えればOKです。強すぎて、ミスったときに消しづらいです。HTML5からの実装です。
manifestの指定はドメイン単位で効果があるので、サブドメイン含めてドメインが異なれば効果がありません。Safariは問答無用に適用されますが、Firefox3.6の場合だと「This website ( ayumusato.com ) is asking to store data on your computer for offline use. Allow | Never for This Site | Not Now」と洋風に訊いてくれます。不具合ありそうならここで拒否ればOKなわけですね。
いまのところ主要ブラウザではSafariとFirefoxがサポートしている模様。そもそもDOCTYPEの宣言が、「<!DOCTYPE html>」でないと無視されるようなのでご注意を。XHTMLのまま味見することはできないみたい。
manifestファイル記述の謎
CACHEのみ(非明示含む) : リロード動作でSafariが発狂。キャッシュしてないコンテンツを全て見失う。
CACHE + NETWORK : 大体ちゃんと効いてる感じ。
NETWORKの宣言自体が、Firefox3.6ではサポートしてないとか見た覚えがあるわけですが、サポートしてるSafari的には全部きちんと明示しやがれコノヤロウとおっしゃっているように見えます。CACHEはキャッシュ対象コンテンツ、NETWORKはキャッシュしない対象のコンテンツです。
キャッシュさせたいコンテンツだけ書けば、あとはブラウザがよろしくやってくれると思い込んでいましたが、そうもいきませんでした。キャッシュをあてにせずサーバーを見に行くことも明示しないといけないようです。
超強いキャッシュ
強すぎて本当に消せません。とりあえず自分が分かっている消し方について以下に。
Safari 4 : アプリケーションメニューから"Reset Safari"・・・。
Firefox 3.6 : Preferences -> Advanced -> NetworkタブのOffline Storageグループからドメインを選んでremeove。唯一まともな削除方法。
iPhone : 消し方わからない or2
強すぎて散々です。ひどい。
a-blog cms的に
a-blog cms他、動的生成でURLはmod_rewrite使ってチョロまかしているシステムの場合は、なるべく実存パスを書いたほうがよさそうです。仮想パスでアクセスするようにmanifest内に書いたら、SafariもFirefoxも微妙な感じの動作でした。たぶんキャッシュできてない。
よって、manifest内のパスは実存パスと同じように記述したほうが確実そうです。manifestファイル自身はあまり関係ないようなので、/havelog.manifestのように仮想パスで通してシステムを仲介させてもOKっぽいです。manifestファイルを動的に生成するのは便利そう。
a-blog cmsの管理ページとかも、そうそう変わるもんでは無いはずなので、うまいことコントロールしてやればajax以上に軽快に動作するんじゃないかなーと思います。
参考
今回のmanifest事変は、以下のURLを参考にしました。その他名も分からないリソースもいくつかありましたが割愛します。
- 【特集】詳解! HTML 5と関連APIの最新動向 - Webアプリ開発編 (4) キャッシュマニフェストの記述
- W3C - Offline Web Applications 日本語訳 - HTML5.JP
このまま、HTML5の未来的実装方面から、Javasciprtのほうに遊んでいきたいと思っています。今のところ、Javascriptまともに書いたことないんですよねー。PHPばっか!
面白いことできたら、またブログに書いてみます。