移动Web应用程序中“添加到主屏幕”的HTML5缓存清单似乎无法工作

9
我正在开发一款移动 Web 应用程序,它连接到在线数据库,在离线本地 MySQLite 数据库中加载数据,然后应该可以离线使用。 我已经把整个数据库的内容都搞定了,但是应用程序仍然无法离线使用,因为没有正确缓存所有资源。
我的清单如下:
CACHE MANIFEST
# Cache manifest version 0.0.5

http://www.mywebsite.com/appfolder/app/detail.html
http://www.mywebsite.com/appfolder/app/index.html
http://www.mywebsite.com/appfolder/app/list.html
http://www.mywebsite.com/appfolder/css/style.css
http://www.mywebsite.com/appfolder/src/iscroll.js
http://www.mywebsite.com/appfolder/js/jquery-1.5.1.min.js
http://www.mywebsite.com/appfolder/thumbs/1872A.jpg
http://www.mywebsite.com/appfolder/thumbs/1913.jpg
http://www.mywebsite.com/appfolder/thumbs/1916.jpg
http://www.mywebsite.com/appfolder/thumbs/1925.jpg
http://www.mywebsite.com/appfolder/carsimages/1872A_1.jpg
http://www.mywebsite.com/appfolder/carsimages/1872A_2.jpg

NETWORK:

# All URLs that start with the following lines
# are whitelisted.

CACHE:

# Additional items to cache.

FALLBACK:

该应用程序在在线状态下运行顺畅,但一旦离线,我会收到以下错误消息:“Myappname无法打开,因为它未连接到互联网”(在iPad上“添加到主屏幕”视图中)和“Safari无法打开页面,因为它未连接到互联网”(在同一iPad的Safari视图中)。
我已经采取的步骤: 通过将以下内容添加到我的.htaccess文件中,确保清单以正确的内容类型提供:
AddType text/cache-manifest .manifest

有什么想法,为什么这个不起作用?

有人看到了关于v4.3离线模式缓存和主屏幕HTML5 web应用的明确答案吗?我已经尝试了此线程中的所有解决方法,但没有运气。它是坏了还是有解决方法? - user779708
Jeff,试试我做的:https://dev59.com/JVbTa4cB1Zd3GeqP8SsB#7022283 - Muxa
你解决了这个问题吗?我可以问一下你是如何阻止主屏幕应用程序在用户点击链接时立即打开Safari的吗? - Steve
7个回答

14

iPad的缓存清单文件必须命名为"cache.manifest"。这对我解决了问题。


1
+1 我很惊讶地发现这对我也起作用了,我已经验证了iPad正在获取我的清单,并对其进行操作(我添加了一些我的应用程序实际上没有引用的文件,并且它们出现在服务器日志中)。 - Paul Dixon
好的,我现在已经在多个项目中运行了,而不需要设置特定的名称。我会尝试找出这个特定项目的问题所在。 - laurens peeters

1
如果您正在连接到在线资源,我希望在“网络”部分中看到该资源的URL。应用程序访问的每个URL都需要在清单中明确或隐式地列出。
尝试添加:
NETWORK:
*

为了表明在线时可能访问任何URL。

这难道不意味着没有任何内容可以离线访问吗? - Mauvis Ledford
只有在 CACHE 部分下没有任何内容时才执行。 - Muxa

1

0

更新我的上一篇文章。我现在可以在iPad上运行我的HTML5离线应用程序了。首先,我认为您需要将iPad更新至至少4.3.2(未经确认,但我现在正在使用4.3.3)。更重要的是,缓存清单文件必须命名为“cache.manifest”。在我的实验中,如果您使用任何其他名称,则无法离线运行。我将我的离线应用程序设置为全屏模式(即将“apple-mobile-web-app-capable”设置为“yes”),并且它可以在航空模式下从主屏幕运行。

因此,Liz Daly部分正确。离线模式似乎只在以上限制条件下起作用。


调用清单cache.manifest并没有帮助我。据我所知,我已经做了一切正确的事情,包括设置mime类型。 - Mauvis Ledford
我有一个带有4.3.2版本的iPad,也遇到了同样的问题。以下是对我有效的解决方法:https://dev59.com/JVbTa4cB1Zd3GeqP8SsB#7022283 - Muxa

0

我在iPad上遇到了同样的问题。结果发现它不喜欢文件夹中的缓存清单文件。我有一个/Content/cache.manifest,但它不起作用(当离线时应用程序无法从主屏幕加载)。当我将清单文件移动到应用程序根目录并将清单引用更改为cache.manifest时,它开始工作。

(它不必被称为cache.manifest - 我已经使用CacheManifest.ashx使其工作)


0

我对Liz Daly的回答很好奇。我正在使用一台iPad,我刚刚(遗憾地)将其从iOS 4.2更新到iOS 4.3。我有一个HTML5离线应用程序可以在没有互联网连接的情况下从主屏幕运行,并能够将状态保存到localStorage存储中。

在我将iPad更新到iOS 4.3之后,这个应用程序现在需要互联网连接才能在主屏幕上启动时重新加载页面,并且当我关闭iPad时,localStorage会被清除。

因此,我在Safari上运行我的离线应用程序时,在iPad上的iOS 4.3上遇到了真正的问题,而苹果公司没有任何消息表明他们是否会修复这个问题(至少将其恢复到iOS 4.2中的相同功能)。


-3

1
那篇文章充满了错误信息。离线缓存在所有iOS版本的全屏模式下都能正常工作——我的应用程序正在使用它。 - Liza Daly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接