Offline iOS web app: loads my manifest, but doesn't work offline

后端 未结 13 2121
温柔的废话
温柔的废话 2020-12-04 05:57

I\'m writing a web app to be used offline on iOS. I\'ve created a manifest, am serving it up as text/cache-manifest, and it usually works fine, when running in

13条回答
  •  醉酒成梦
    2020-12-04 06:51

    I found debugging HTML5 offline apps to be a pain. I found the code from this article helped me figure out what was wrong with my app:

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

    Debugging HTML 5 Offline Application Cache by Jonathan Stark

    If you are looking to provide offline access to your web app, the Offline Application Cache available in HTML5 is killer. However, it’s a giant PITA to debug, especially if you’re still trying to get your head around it.

    If you are struggling with the cache manifest, add the following JavaScript to your main HTML page and view the output in the console using Firebug in Firefox or Debug > Show Error Console in Safari.

    If you have any questions, PLMK in the comments.

    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);
    

提交回复
热议问题