Не удается заставить веб-приложение работать в автономном режиме на iPod - PullRequest
5 голосов
/ 20 ноября 2010

Я написал базовое веб-приложение типа менеджера паролей для автономного запуска на мобильном устройстве (тестирование на iPod Touch 4-го поколения).Я добавил приложение на главный экран, и все работает нормально, когда iPod подключен к сети и может подключаться к серверу.Когда я перевожу iPod в автономный режим, при открытии приложения появляется следующее диалоговое окно:

Не удается открыть PwdThing

Невозможно открыть PwdThing, поскольку он не подключен к Интернету

Один статический файл HTML для приложения (passwordthing.html) указывает на файл манифеста:

<html manifest="cache.manifest">
...

Файл cache.manifest включает в себя все файлы, используемые приложением (включая файлы jQuery Mobile ):

CACHE MANIFEST
passwordthing.html
passwordthing.js
...

И файл cache.manifest настроен для использования в качестве text/cache-manifest в файле .htaccess:

AddType text/cache-manifest .manifest

Все исходные файлы находятся на Github ( этот коммит - версия на момент написания), и я установил публичный сервер длятакже установите его с.

Почему я не могу заставить мое приложение работать в автономном режиме?

Ответы [ 3 ]

2 голосов
/ 20 ноября 2010

Единственное, о чем я могу думать, это то, что вы не изменили файл, и мобильное сафари кэшировало старую версию манифеста.Добавьте комментарий к вашему манифесту.Вы также можете попробовать изменить имя самого файла манифеста;Я должен был сделать это, чтобы мой IPad был помещен в кэш - каждый раз, когда я обновляю свое приложение, я меняю имя манифеста, чтобы включить дату.

Обратите внимание, что iOS4.2 имеет гораздо лучшую поддержку манифеста.Вы можете заметить, что ситуация улучшится, когда она выйдет.

Правка - или, как оказалось, это просто плохое имя файла.;) (см. комментарии к вопросу).

1 голос
/ 06 декабря 2010

[[Реплицировано мой ответ отсюда ниже, потому что оно может применяться здесь к:]]

Мне показалось, что отладка автономных приложений HTML5 - это боль.Я обнаружил, что код из этой статьи помог мне понять, что случилось с моим приложением:

http://jonathanstark.com/blog/2009/09/27/debugging-html-5-offline-application-cache/

Отладка кэша автономных приложений HTML 5 от Jonathan Stark

Если вы хотите предоставить автономный доступ к вашему веб-приложению, кэш автономных приложений, доступный в HTML5, просто ужасен.Тем не менее, это гигантская PITA для отладки, особенно если вы все еще пытаетесь разобраться с ней.

Если вы боретесь с манифестом кэша, добавьте следующий JavaScript на свою главную страницу HTML и просмотритеВыведите на консоль, используя Firebug в Firefox или Отладка> Показать консоль ошибок в Safari.

Если у вас есть какие-либо вопросы, PLMK в комментариях.

HTH,
j

var cacheStatusValues = [];
cacheStatusValues[0] = 'uncached';
cacheStatusValues[1] = 'idle';
cacheStatusValues[2] = 'checking';
cacheStatusValues[3] = 'downloading';
cacheStatusValues[4] = 'updateready';
cacheStatusValues[5] = 'obsolete';

var cache = window.applicationCache;
cache.addEventListener('cached', logEvent, false);
cache.addEventListener('checking', logEvent, false);
cache.addEventListener('downloading', logEvent, false);
cache.addEventListener('error', logEvent, false);
cache.addEventListener('noupdate', logEvent, false);
cache.addEventListener('obsolete', logEvent, false);
cache.addEventListener('progress', logEvent, false);
cache.addEventListener('updateready', logEvent, false);

function logEvent(e) {
    var online, status, type, message;
    online = (navigator.onLine) ? 'yes' : 'no';
    status = cacheStatusValues[cache.status];
    type = e.type;
    message = 'online: ' + online;
    message+= ', event: ' + type;
    message+= ', status: ' + status;
    if (type == 'error' && navigator.onLine) {
        message+= ' (prolly a syntax error in manifest)';
    }
    console.log(message);
}

window.applicationCache.addEventListener(
    'updateready',
    function(){
        window.applicationCache.swapCache();
        console.log('swap cache has been called');
    },
    false
);

setInterval(function(){cache.update()}, 10000);
0 голосов
/ 12 октября 2012

Также убедитесь, что в cache.manifest указана правильная спецификация (в моем случае UTF-8), соответствующая вашей в HTML-файле.Если у вас есть только файл ASCII, отличный от BOM, а для Типа контента установлено значение UTF-8, кэширование не удастся

HTH кого-либо.

Кристина Бурсен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...