移动Web应用程序未正确清除缓存

Mul*_*rry 34 javascript html5 web-applications mobile-safari ipad

我一直在为iPad开发移动网络应用程序,我在测试代码时遇到了一个问题.

偶尔,看似随机,iPad将停止正确更新我写的所有JS库.更新一些代码并发布更改后,我会注意到一些文件已经正确更新,而其他文件没有.在众多缓存清除,电源循环和wifi切换之后,这种行为仍然存在.

如果我在safari中加载应用程序我没有问题,但是当我从应用程序的主屏幕图标加载时,问题会重新出现.我已经完成了简单的测试,例如向库中添加警报线,除了在mobile-web-app窗口之外,该警报在没有任何问题的情况下触发.然后,看似随机,问题就消失了,有时需要5分钟,有时需要一个小时.

无论应用程序是否使用清单文件,我都会看到此行为.我还试图通过更新清单文件来刷新这些遗留文件以强制重新缓存,但问题仍然存在.

有谁知道这是否是iPad的已知问题?我可以做些什么来解决这个问题吗?

小智 11

对我来说,解决方案是?v=1在所有Javascript和CSS链接的末尾添加.我已经尝试了一切,然后在另一个Stackoverflow帖子上看到它,它直接工作!是时候了...


ben*_*h-o 8

我得到了解决方案!

但首先问题是:iPad和iPhone在打开应用程序时没有刷新缓存.即使删除应用程序,清除safari缓存,重新启动设备等等也无法正常工作.

这是解决方案...... taadaa!

你的清单文件必须改变.如果更改,iPad/iPhone将重新加载缓存.所以只需在清单文件中写一个版本号,并在更改内容时更改它:

# Version: 1.2
Run Code Online (Sandbox Code Playgroud)

因此,完整的清单文件可能如下所示:

CACHE MANIFEST

# Version 1.5

NETWORK:
*

CACHE:
index.html
jquery-1.7.2.min.js
images/logo.jpg
Run Code Online (Sandbox Code Playgroud)

它甚至可以重新加载未写入清单文件的图像.我试了好几次.

顺便说一句.别忘了用http://manifest-validator.com查看你的清单文件

我的来源是如何关于离线Web应用程序的非常酷:http://gregsramblings.com/2012/05/28/html5-application-cache-how-to/

它还说你可能需要两次启动你的应用程序:

如果清单已更新,浏览器将下载缓存文件列表中的所有文件,但是,此时原始内容已经加载(请记住它已经缓存,因此加载超快!).

但它总是在第一次尝试时对我有用.


小智 6

解决这个问题.添加指向Web App本身的链接,如...

<a href="javascript:top.frames.location.reload();">refresh</a>
Run Code Online (Sandbox Code Playgroud)

它就像iPhone/iPad Safari地址栏上的重新加载按钮一样!


Neo*_*Neo 1

我在 iPad 上的 Web 应用程序遇到了完全相同的问题 - 有时,在独立模式下运行的 Web 应用程序随机不会刷新特定资源(HTML/CSS/JS 文件),尽管杀死了所有可能的应用程序,清除Safari 缓存和历史记录、重新启动、重新启动 WiFi 连接、刷新或删除manifest文件或将设备放入微波炉中;即使使用大锤也被证明是徒劳的。

虽然我还没有找到一种“彻底”的方法来修复它,但总有一种解决方法 -重命名资源。

只需更改不刷新文件的名称即可。如果您遇到问题(比如说foobar.js不更新),请将其重命名为foobar2.js并更新其他文件中对此资源的引用。这当然可能会很痛苦尤其是在经过一周的开发之后foobar12.js),但在我们看到 iOS 的官方修复或可用的刷新技术之前,这是我所知道的获得它的唯一方法启动并运行。