0

HTML5 applicationCache API を使用していますが、キャッシュされたページの更新が表示されません。マニフェスト ファイルに変更を加え、マニフェストがクライアントにキャッシュされていないことを確認し、キャッシュされたページの新しいバージョンがダウンロードされた後にページをリロードします (onupdateready イベントの後)。

applicationCache API が Chrome と FireFox でサポートされていることは知っていますが、Opera と Safari では望ましい動作 (マニフェストを更新した後のキャッシュされたページの変更) しか確認できません。

したがって、Chrome と FireFox でページの最新のキャッシュ バージョンを表示するにはどうすればよいですか?

ここに私の HTML/JavaScript (index.htm) があります:

<!doctype html>
<html manifest="manifest.aspx">
<head>
    <title>Log</title>
    <script>
        window.onload = function () {

            if (window.applicationCache) {
                var log = document.getElementById("log");

                function logEvent(msg) {
                    log.innerHTML += "<li>" + msg + "</li>";
                }

                window.applicationCache.onchecking = function (e) {
                    logEvent("checking cache");
                }

                window.applicationCache.oncached = function (e) {
                    logEvent("cached");
                }

                window.applicationCache.onupdateready = function (e) {
                    logEvent("update ready");
                    logEvent("swapping cache");
                    applicationCache.swapCache();
                }

                window.applicationCache.onnoupdate = function (e) {
                    logEvent("no update");
                }

                window.applicationCache.onobsolete = function (e) {
                    logEvent("obsolete");
                }

                window.applicationCache.ondownloading = function (e) {
                    logEvent("downloading");
                }

                window.applicationCache.onerror = function (e) {
                    logEvent("error");
                }

                logEvent("window load");
            }
        }
    </script>
</head>
<body>
    <div>
        <h1>Message Logger 15</h1>

        <div id="eventLogContainer">
            <h2>Event Log</h2>
            <ul id="log"></ul>
        </div>

    </div>
</body>
</html>

ここに私のマニフェスト (manifest.aspx) があります:

CACHE MANIFEST
# version fifteen

CACHE:
index.htm

私のマニフェストは ASPX ファイルですが、Content-Typeが に設定されtext/cache-manifestEncodingが に設定されていutf-8ます。

4

2 に答える 2

0

あなたの例は Chrome と Safari で問題なく動作しており、Firefox 4 で数回更新した後 (FF の appcache 実装は、他の実装と比較して多少「遅れている」ことがわかります)。

おそらく、ロギング コードでエラーが発生していない可能性があります。HTML とマニフェスト ファイルを変更した後、ページの更新時に変更が表示されないだけですよね?

確認事項:

  1. HTML は整形式ですか? めちゃくちゃな HTML はエラーにつながります (ページも HTML5 であることを確認してください)。
  2. マークアップでファビコンを参照していますか? そうでない場合は、そうしてください(空のリンクであっても)-それ以外の場合、Webkitはエラーを報告します(FFについてはわかりません)
  3. キャッシュ マニフェストを変更するとき、そのたびにファイル サイズを確実に変更していますか。つまり、行の長さが変わるようにコメントを追加または削除していますか?
  4. キャッシュが実際に正しいコンテンツ タイプで提供されることをテストします。UN*X では、次のように端末セッションからこれを行うことができます:または、Firebug などを使用して、キャッシュ ファイルを提供するときにヘッダーを調べます。curl -I http://your-domain/path/to/cache-manifest.manifest
  5. キャッシュ ファイルへのパスが、それを参照するすべての HTML ページで正しいことを確認します
于 2011-06-30T07:26:57.203 に答える
0

キャッシュ マニフェストを更新すると、ブラウザーは新しいファイルをチェックしますが、それらのファイルがサーバーからフェッチされるか、ローカル ブラウザー キャッシュからフェッチされるかは、通常のキャッシュ ルールによって決定されます。したがって、ブラウザがファイルの新しいバージョンを 1 日に 1 回だけ検索するように設定されている場合、またはキャッシュ マニフェストにリストされているファイルに将来の期限切れヘッダーが提供されている場合、それらのファイルはマニフェスト ファイルを更新しても更新されません (ブラウザのキャッシュを空にするか、CTRL + F5 を実行しない限り)。

要するに、どのヘッダーindex.htmが提供されているかを確認してください。

于 2011-07-01T10:55:58.403 に答える