这是关于 Android 设备上的 HTML5 离线应用程序。
我们遇到了一个问题,即在以下情况下,为支持脱机的 HTML5 应用程序(带有完整的缓存清单文件)添加书签时无法在 Android 浏览器上加载:
- 在浏览器上为应用添加书签
- 关闭所有无线连接
- 完全关闭浏览器
- 尝试从主屏幕启动书签
我们最终会收到“无法连接到互联网”消息。当保存到主屏幕和飞行模式时,该应用程序在 iOS 设备上运行良好。
是否有应该保存应用程序的特定方式,或者这是一个特定于 Android 的怪癖?
我会检查并看到:
text/cache-manifest
.CACHE MANIFEST
,此后您的网址要么是相对于清单的,要么是绝对网址。NETWORK:
标记。因此,我在多个实例上遇到了 chrome和 android 的类似问题。显然实现没有问题,因为我在 FF 上尝试过它并且效果很好,Safari 也是如此。我认为这是唯一引起的,当 chrome 运行时,数据正在 RAM 上获取网页的缓存。如果您关闭浏览器,并且 android 结束该过程,则会初始化一个新的 chrome 实例,并且您现有的应用程序数据将消失。我无法证实这一点,但似乎很可能是问题所在。
还要检查您的服务器是否配置为正确发送 MIME 类型:如何设置您的服务器以发送正确的 MIME 类型
除了 Ben Max Rubinstein 和 Compid 的回答,如果您的应用程序 url 是这样的:example.com/myapp
您需要添加以下正斜杠,如下所示:example.com/myapp/
.
当您在线时,服务器会自动重定向您,但如果您离线,显然这不会发生。
我遇到的是.manifest
Apachemime.types
配置中的文件被正确设置为text/cache-manifest
,然后下面的几行被覆盖为application/x-ms-application
(为了与 MS 的 ClickOnce 兼容)。为了解决这个问题,我采用了不同的文件名结尾,即.cachemanifest
正确配置了它的 mime 类型,重新启动了 Apache,将清单文件重命名为cache.cachemanifest
,将我的 <html> 清单属性更改为指向该文件,然后我终于能够缓存我的Android 上的 web 应用程序(在桌面浏览器中没有任何问题,显然不关心缓存清单文件的 mime 类型)。希望这可以帮助。
缓存清单的文件名是什么?我听说扩展可能会影响 android 的行为。确保您的文件以.manifest
此外,确保您的服务器正确地为清单文件提供 MIME 类型,即text/cache-manifest