Chrome / FireFox не отображает обновления на автономной странице - PullRequest
0 голосов
/ 30 июня 2011

Я работаю с HTML5 applicationCache API и у меня возникла проблема с просмотром обновлений кэшированной страницы. Я позабочусь об основах: внесение изменений в файл манифеста, проверка того, что манифест не кэшируется на клиенте, и перезагрузка страницы после загрузки новой версии кэшированной страницы (после события onupdateready).

Я знаю, что API applicationCache поддерживается в 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-manifest, а Кодировка установлена ​​на utf-8.

Ответы [ 2 ]

0 голосов
/ 01 июля 2011

Несмотря на то, что обновление манифеста кэша приведет к тому, что браузер проверит наличие новых файлов, выбор этих файлов с сервера или из кэша локального браузера определяется обычными правилами кэширования.Таким образом, если ваш браузер настроен на поиск новой версии какого-либо файла только один раз в день, или есть заголовки с истекшим сроком действия, которые будут обслуживаться с файлами, перечисленными в вашем манифесте кэша, эти файлы не будут обновляться при обновлении файла манифеста (если вы не очистите кеш браузера или не выполните CTRL + F5).

Короче говоря: проверьте, какие заголовки index.htm обслуживаются.

0 голосов
/ 30 июня 2011

У меня ваш пример работает в Chrome и Safari без проблем, и после нескольких обновлений в Firefox 4 (я считаю, что реализация appcache в FF несколько «отстает» по сравнению с другими). ​​

Предположительно, вы не получаете никаких ошибок в своем коде регистрации, просто он не показывает изменения при обновлении страницы после изменения HTML-файла и файла манифеста, верно?

Вещи для проверки:

  1. Правильно ли сформирован HTML? Запутанный HTML приведет к ошибкам (убедитесь, что страница тоже HTML5).
  2. Вы упоминаете иконку в своей наценке? Если нет, сделайте это (даже если это пустая ссылка) - в противном случае webkit сообщит об ошибке (не знаю о FF)
  3. Когда вы меняете манифест кеша, вы определенно меняете размер его файла каждый раз, то есть добавляете / удаляете комментарии, чтобы длина строк менялась?
  4. Проверьте, что кеш действительно обслуживается с правильным типом контента. В UN * X вы можете сделать это в терминальном сеансе следующим образом: curl -I <a href="http://your-domain/path/to/cache-manifest.manifest" rel="nofollow">http://your-domain/path/to/cache-manifest.manifest</a> В качестве альтернативы используйте Firebug или аналогичный для проверки заголовков при обслуживании файла кэша
  5. Проверьте правильность пути к файлу кэша на всех HTML-страницах, ссылающихся на него
...