iphone - iOS Web App - 如何处理过度的应用程序缓存?

标签 iphone html caching web-applications html5-appcache

我一直在开发一个相当复杂的 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 网络应用程序问题。缓存在移动版 Safari、移动版 Chrome 和所有桌面浏览器中正常工作。 iOS 似乎有一个单独的应用程序缓存,包括用户无法清除的网络应用程序。

好像很多SO用户都遇到过这个问题,但是我找不到满意的解决方案。有没有人在类似情况下解决了这个问题?我可以使用 list 文件来指定 缓存多个文件吗?似乎 list 文件用于执行相反的操作。

最佳答案

考虑到它的值(value),而且它不是一个完美的解决方案,我们不得不通过附加查询字符串来解决。我写了一个 shell 脚本来使这个和其他一些任务更加自动化,你可以在 GitHub 上查看源代码。 .一些细节:

  • 它专为 JS 而设计,但也可以轻松编辑以处理 CSS。
  • 它获取 script_order.txt 中列出的所有文件并使用 Google 的 Closure Compiler 编译它们
  • 尽可能将它们分组为 25kb 以下的 block (iPhone 不会缓存超过 25kb 的 gzip 之前的任何内容,尽管显然这仅扩展到浏览器而不是独立的网络应用程序)
  • 输出一个 PHP 文件 <script>具有 ?v=timestamp 的标签附加到脚本文件名。如果您使用的是静态 HTML 且无法包含 PHP 文件,则可以重写输出以将脚本标记附加到 index.html 文件。

另一个非常 hacky 的解决方案是用 .php 保存你的 JS/CSS文件扩展名,并在这些文件中将 header 设置为如下内容:

<?php
header("content-type: application/javascript");
header('Cache-Control: no-cache');
header('Pragma: no-cache');
?>
window.alert('hello world');

编辑:

将日期设置为 future 2、3 或 4 天后,从主屏幕启动应用程序,然后将日期设置回正常也可以达到目的。

关于iphone - iOS Web App - 如何处理过度的应用程序缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17576069/

相关文章:

iphone - 报刊亭图标发生变化并出现问题

ios - 找不到适合 iPhone5 架构的图片

html - 在此全屏视频下制作文字

javascript - 带有图像 slider 的 Div 仅在 Safari 中不继承高度

iphone - 获取 dateformatter 的 nil 值

iphone - 调用 NSURLConnectionDataDelegate 方法来下载图像只是偶尔有效

php - 使用 PHP 生成动态 HTML 页面

javascript - 即使应用程序卸载后,NW.js 本地存储缓存仍然存在

为多个应用程序提供服务的 Java 缓存

jquery - 在浏览器中强制刷新缓存