我已经编写了一个基本的密码管理器,它可以在移动设备上脱机运行(在第4代iPod Touch上进行测试)。我已经把这个应用程序添加到主屏幕上了,当iPod在线的时候,它可以正常工作,并且可以到达服务器。一旦我让iPod离线,当我打开应用程序时,会出现以下对话框:
无法打开PwdThing PwdThing无法打开,因为它没有连接到因特网
应用程序(passwordthing.html)的单个静态HTML文件指向清单文件:
<html manifest="cache.manifest">
...cache.manifest文件包括应用程序使用的所有文件(包括jQuery移动电话文件):
CACHE MANIFEST
passwordthing.html
passwordthing.js
...并将cache.manifest文件设置为.htaccess文件中的text/cache-manifest:
AddType text/cache-manifest .manifest所有源文件都在Github上(此承诺是编写本文时的版本),我也设置了一个公共服务器来安装它。
为什么我不能让我的应用程序离线工作?
发布于 2010-11-20 02:34:40
我唯一能想到的就是您没有更改文件,而且mobile缓存了清单的旧版本。向清单中添加注释。您可能还想尝试更改清单文件本身的名称;我必须这样做才能使我的IPad缓存--每次更新应用程序时,我都会更改清单的名称以包括日期。
请注意,iOS4.2有更好的清单支持。当它出来的时候,你可能会看到事情有所改善。
编辑--或者,事实证明,它只是一个糟糕的文件名。)(见关于问题的评论)。
发布于 2010-12-05 23:42:24
[[在下面复制我在这里的回答,因为它可能适用于:]]
我发现调试HTML5离线应用程序很痛苦。我发现本文中的代码帮助我找出了我的应用程序的问题所在:
http://jonathanstark.com/blog/2009/09/27/debugging-html-5-offline-application-cache/
用Jonathan调试HTML 5脱机应用程序缓存 如果您希望提供对web应用程序的脱机访问,HTML5中可用的脱机应用程序缓存是致命的。然而,这是一个巨大的皮塔调试,特别是当你仍然试图让你的头。 如果您正在处理缓存清单,请将以下JavaScript添加到您的主HTML页面中,并使用Firefox中的Firebug或Debug > Safari中的Show控制台查看控制台中的输出。 如果您有任何问题,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);发布于 2012-10-11 22:03:14
此外,确保cache.manifest具有与HTML中的BOM匹配的正确BOM(在我的例子中是UTF-8)。如果您只有一个非BOM ASCII文件,并且内容类型被设置为UTF-8,缓存将失败
有人吗。
克里斯汀·波尔森
https://stackoverflow.com/questions/4230748
复制相似问题