Подтвердить что ты не робот

HTML5 в автономном режиме "Ошибка кэширования приложения: Ошибка манифеста (-1)"

Я пытаюсь написать автономное приложение HTML5, но не могу заставить Chrome принять файл манифеста кэша.

Chrome записывает следующий вывод на консоль при загрузке приложения:

Creating Application Cache with manifest http://localhost/cache.manifest
Application Cache Checking event
Application Cache Error event: Manifest fetch failed (-1) http://localhost/cache.manifest

Однако, если я удалю все строки из файла манифеста, кроме первой строки (т.е. "CACHE MANIFEST" ), Chrome принимает манифест:

Creating Application Cache with manifest http://localhost/cache.manifest
Application Cache Checking event
Application Cache Downloading event
Application Cache Progress event (0 of 0)
Application Cache Cached event

Но, как только я добавлю новую строку в манифест (даже если следующая строка пуста), Chrome возвращается к жалобе на неудачу выборки.

Все файлы обслуживаются локально с ПК с Windows 7 через Python с помощью SimpleHTTPServer на порту 80. Я обновил типы_массы в% PYTHON%/Lib/mimetypes.py со следующей строкой:

    '.manifest': 'text/cache-manifest',

манифест должен содержать следующее:

CACHE MANIFEST 
scripts/africa.js
scripts/main.js
scripts/offline.js
scripts/libs/raphael-min.js
favicon.ico
apple-touch-icon.png
4b9b3361

Ответ 1

Теперь я решил эту проблему, переключившись на CherryPy для обслуживания этих файлов:)

Если кто-то еще так же застрял, но хочет, чтобы часть сервера была простой, для начала работы может быть достаточно следующего Python:

import cherrypy


class SimpleStaticServer:

    @cherrypy.expose
    def index(self):
        return '<html><body><a href="index.html">Go to the static index page</a></body></html>'


cherrypy.config.update({
        # global
        'server.socket_host': '192.168.0.3',
        'server.socket_port': 80,

        # /static
        'tools.staticdir.on': True,
        'tools.staticdir.dir': "(directory where static files are stored)",
    })
cherrypy.quickstart(SimpleStaticServer())

Если вы хотите посетить "сайт" с другого устройства, вам нужно будет использовать внешний IP-адрес (для меня это было 192.168.0.3). В противном случае вы можете просто использовать "127.0.0.1" для значения "server.socket_host". Затем я указываю браузеру http://192.168.0.3/index.html, чтобы получить статическую страницу индекса.

Ответ 2

Чтобы кэшировать сайт в автономном режиме (HTML5), вам необходимо указать все файлы, необходимые для его запуска. Вкратце укажите основные компоненты сайта.

Легкий способ создания манифеста находится в Note Pad.

Примечание. CACHE MANIFEST должен быть первой строкой, и ваши файлы будут следовать за строковым пространством следующим образом:

CACHE MANIFEST

Scripts/script.js
Content/Site.css
Scripts/jquery-ui-1.8.20.min.js
Scripts/modernizr-2.5.3.js
SESOL.png
Scripts/jquery.formatCurrency-1.4.0.min.js
http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css
http://code.jquery.com/jquery-1.8.2.min.js
http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js
Content/themes/images/icons-18-white.png
Controllers/AccountController
Controllers/HomeController
Models/AccountModels
Account/Login
Home/CheckOut

Примечание2: удалите все пробелы после каждой строки. Примечание: 3 вам нужно следовать точной форме FOLDER/File или FOLDER/FOLDER/FILE ect....

Просто потому, что у вас файл манифеста не означает, что он будет загружаться. вам нужно добавить в тег следующее:

<html manifest="~/cache.manifest" type="text/cache-manifest">

Не забывайте, что после его добавления он кэшируется при первой загрузке страницы. Поэтому вам нужно зарегистрировать событие кеша в событии "mobileinit".

$(document).on("mobileinit", function () {
  //register event to cache site for offline use
cache = window.applicationCache;
cache.addEventListener('updateready', cacheUpdatereadyListener, false);
cache.addEventListener('error', cacheErrorListener, false);
function cacheUpdatereadyListener (){
    window.applicationCache.update();
    window.applicationCache.swapCache();
    }
    function cacheErrorListener() {
        alert('site not availble offline')
    }
}

Загрузите Safari и используйте веб-инспектор, чтобы найти ошибки.   http://developer.apple.com/library/safari/#documentation/appleapplications/Conceptual/Safari_Developer_Guide/1Introduction/Introduction.html#//apple_ref/doc/uid/TP40007874-CH1-SW1

Совет. Инструменты разработчика Chrome "F12" покажут вам ошибки в нагрузке манифеста. т.е. файлы, которые вам нужно добавить.

Надеюсь, что это поможет, охватывает весь процесс. Я предполагаю, что если вы находитесь на этом этапе разработки, вам нужно добавить их в мобильный init:

$.mobile.allowCrossDomainPages = true; // cross domain page loading
$.mobile.phonegapNavigationEnabled = true; //Android enabled mobile
$.mobile.page.prototype.options.domCache = true; //page caching prefech rendering
$.support.touchOverflow = true; //Android enhanced scrolling
$.mobile.touchOverflowEnabled = true; // enhanced scrolling transition availible in iOS 5

Руководство разработчика Safari:   https://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/Client-SideStorage/Client-SideStorage.html#//apple_ref/doc/uid/TP40002051-CH4-SW4

Ответ 3

Вы пробовали что-то вроде https://manifest-validator.appspot.com/ для проверки вашего манифеста?

Я долгое время боролся с файлом манифеста, очень сложно определить, что не так. Может быть что-то столь же простое, как неправильное кодирование, до дополнительного прерывания строки в начале.

Ответ 4

Сегодня я испытал точно такую ​​же проблему. После нескольких часов работы я получил ключевой момент: формат файла манифеста. Короче говоря, файл должен начинать новую строку ТОЛЬКО с ascii (0A), а не ascii (0D) или ascii (0D + 0A). Только таким образом я могу жить с Chrome, или я получу пустую страницу и информацию об ошибках в окне консоли.

В соответствии с w3c, (http://www.w3.org/TR/html5/offline.html), в "5.6.3.2" Написание явных проявлений кеша ", допустимы как 0A, 0D, так и 0D + 0A. Итак, мое мнение: Chrome не совместим с w3c в этой точке.

Далее, скажем, если myapp.js должен быть кэширован, он ДОЛЖЕН следовать тому же правилу: начинает новую строку только с ascii (0A), или Chrome будет бросать ту же информацию в окна консоли.

Мой Chrome - это 13.0.782.107

Ответ 6

Я решил эту проблему в visual studio для приложения MVC. выполните следующие шаги:

  • Я создал файл .appcache в блокноте и копировал содержимое файла манифеста в него. (вам не нужно создавать файл манифеста или не создавать представление Manifest.cshtml. просто создайте файл .appcache в блокноте.)

  • укажите ссылку как <html manifest="~/example.appcache"> и проблема будет решена.

Ответ 7

Я думаю, что линия

CACHE:

отсутствует в файле манифеста (должна быть вторая строка перед списком файлов.