【发布时间】:2013-07-08 16:52:40
【问题描述】:
在过去的一个月里,我一直在开发一个相当复杂的 HTML5 网络应用程序。昨晚我的iPhone 突然决定缓存所有的 JS、CSS 和图像并且不加载任何更新的副本。这也发生在我合作伙伴的iPhone 上,所以我假设它会影响我们应用的所有用户。
不用说,清除浏览器缓存、删除网络应用、重启手机和重启无线连接都无法解决问题。
删除<meta name="apple-mobile-web-app-capable" content="yes"> 可以解决问题,但会产生一个新问题,因为我们需要应用像...一样运行。
我们也不打算将旧技巧?number 附加到我们所有脚本、样式表和图像的末尾。这是荒谬的。另外——如果我们要实现这样的东西,它必须是某种动态的 JS 实现。我们的应用程序是一个加载大多数脚本的 HTML 页面,并且附加页面是 AJAX 的,附加数据也是通过 AJAX 获得的。我想这可以做到,但我希望有一个更优雅的解决方案。你知道,我觉得我不应该做任何事情,因为这一切都顺利进行了整整一个月。
使用cache-control、expires 和pragma <meta> 标签对我们也没有任何好处,因为这纯粹是一个iOS Web 应用程序问题。缓存在移动 Safari、移动 Chrome 和所有桌面浏览器中正常工作。 iOS 似乎为用户无法清除的应用程序(包括 Web 应用程序)设置了单独的缓存。
似乎很多SO用户都遇到过这个问题,但是我找不到任何满意的解决方案。有没有遇到类似情况的人解决了这个问题?我可以使用清单文件指定 not 来缓存多个文件吗?似乎清单文件被用来做相反的事情。
【问题讨论】:
-
确认在 iOS7 中仍然是一个(巨大的)问题
-
你在使用HTML Application Cache吗?如果没有,您可以通过创建包含您需要更新的文件的 appcache 清单来“欺骗”iOS Web 应用缓存转储缓存。然后,当您需要进行更改并测试更改时,通过更改 Web 服务器上清单文件的名称来禁用清单。这会使存储的清单和缓存文件无效,因为无法找到服务器上的清单。
-
不使用应用程序缓存,也不使用清单。该网络应用程序用于“生产”环境。不可能在现有安装中的某处更新我们的系统并更改文件名以欺骗缓存。在我的开发环境中,我可以轻松地在文件名中添加一些数字进行测试,但正如 OP 所说,这在生产环境中是不可能的
-
我也有这个,如果我在 Safari 中打开 URL,它会加载最新的 JS。一旦我将它作为 Web 应用程序添加到主屏幕,它就会再次开始使用旧的 JS。太可怕了。
标签: iphone html caching web-applications html5-appcache