需要明确的是,在网络应用程序缓存和在移动Safari浏览器工作正常下线。
问题是,当它被添加到在iPhone 4S和iPad 2,这两种运行iOS 6.0.1主屏幕。 它不会脱机工作并给出了一个网络错误连接到互联网,即“无法打开MYWEBAPP。MYWEBAPP无法打开,因为它没有连接到互联网”
我已经调试这几个小时,似乎无法找到一个解决方案。 我不是在控制台收到任何错误,我跑乔纳森·斯塔克的调试代码
我测试过在桌面Safari浏览器,Chrome和Firefox的开发工具都在线/离线应用程序。 除了Web检查与Safari中的设备。 其结果是在任何iPhone或iPad相同。 他们都将缓存的Web应用程序,并会在移动Safari浏览器的工作,而不是在添加到主屏幕。 没有错误脱机或联机。
据我所知,我使用的最佳做法:
加入HTML报头: <html manifest="photo.appcache">
我也尝试使用不同的名称清单文件包括:作为我读到它的确与众不同cache.manifest和offline.manifest,但在我的测试不要紧的名字是什么,只要扩展名是。清单或.appcache并在.htaccess文件中适当地提供服务。
添加正确的MIME类型: AddType text/cache-manifest appcache manifest
我也尝试: AddType text/cache.manifest manifest
, AddType text/cache.manifest .manifest manifest
, AddType text/cache-manifest .manifest
我不相信这工作: AddType text/cache.manifest
,但我不记得了。 在大多数情况下这并不重要,我坚持:
将AddType文本/缓存清单应用程序缓存清单
作为什么是HTML5的移动样板。
添加:
NETWORK:*
在应用程序缓存文件。 我相信,这一切都可以被下载,以及使各个环节的工作。
- 我试着删除此行:
<meta name="apple-mobile-web-app-capable" content="yes">
因为我在这里阅读,这样就解决了我相似的问题,但我可以确认它在我的测试不起作用。 删除此行或设置内容为“no”在主屏幕上,按下图标会重定向到移动Safari浏览器,而不是打开时全屏。
我已经差不多把范围缩小到它是在iOS 6中的错误(实际上,我使用的是iOS 6.0.1),因为我知道,数据现在已经在浏览器中分离出来的网络应用和那些添加到主屏幕。 我在这里张贴这个问题,看看是否有其他开发商也遇到同样的问题。
我已经解决了这个问题。 我建议在iOS 6的主屏幕Web应用程序如下。
出于测试目的,使用Web检查和一个不错的JS脚本像乔纳森·斯塔克的,知道什么时候该应用在移动Safari浏览器中缓存:
http://jonathanstark.com/blog/debugging-html-5-offline-application-cache?filename=2009/09/27/debugging-html-5-offline-application-cache/
它已经成功地缓存后,应用程序添加到您的主屏幕,并把它打开,以便为它单独缓存主屏幕版本。 它,以便为它工作完全脱机缓存。
由于我的应用程序缓存数据的22MB和数据的高速缓存是分开的Web应用程序,我有问题是不会离开主屏幕应用足够长开到高速缓存。
这是据用户体验去可怕,但还不错的数据是分开的。 我可以证实这一点,因为如果你从Safari浏览器中删除网站数据,主屏幕上的Web应用程序将仍然起作用。
据我所知,没有调试缓存在主屏幕上的Web应用程序中的数据的方式,或者其存储在何处。
上面的答案是非常有益的。 @aul说,他不知道的方式来调试主屏幕上的Web应用程序,但我找到了一种方法。
钩iPad或iPhone到您的计算机,然后在Safari中去发展>,并选择您的设备。 您的主屏幕应用程序必须是为了打开它出现在下拉菜单中。 一旦您访问的应用程序,你可以打开错误控制台,看着乔纳森·斯塔克的剧本去上班。 一旦清单下载后,您将能够使用的应用程序在离线模式下。
这个脚本所做的生活更轻松! 感谢@保罗!
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);
我有两个部分问题。 我在我的生成缓存清单与ASP.NET MVC /剃须刀,因为我希望能够轻松地主办的网站关闭虚拟应用程序,仍然有路排队。 内容类型未能恰当设置缓存清单,因此Internet Explorer和Safari(IOS)不承认它(即使上的Chrome浏览PC和Android会)。
一旦我解决了这个问题,它仍然没有,当我试图访问我的Azure的托管应用与iOS的Safari工作。 当我试图用Internet Explorer访问,我看到它没有对我有一个字体正确的MIME类型。
所以,提醒一句:绝对确保MIME类型不仅清单的,也是所有文件清单依赖。