WebKit .appcache文件缓存动态页面

3
我的移动web应用的主页是一个.jsp页面。我的应用需要登录(Google App Engine),因此当用户未登录时有一个“登录”按钮,当用户登录时有一个“注销”按钮,所有这些都由.jsp页面上的代码处理。
我在页面上加载了很多JS代码,所以我使用了一个.appcache文件来缓存它。不幸的是,尽管我将我的.jsp页面添加到网络区域,但该页面以一种奇怪的方式被缓存,忽略了来自服务器的内容。这意味着我的“注销”按钮在用户未登录时显示,“登录”按钮在用户已登录时显示。
我尝试添加no-cache指令作为元标记,但它们都被忽略了。
有什么想法吗?

不要设置元标签 - 一开始就发送正确的头部! - Nick Johnson
2个回答

3
根据《深入浅出HTML5》,引用清单的页面会自动包含在清单中。

http://diveintohtml5.ep.io/offline.html

问:我需要在缓存清单中列出HTML页面吗?

答:是和否。如果您的整个Web应用程序包含在单个页面中,请确保该页面使用manifest属性指向缓存清单。当您导航到具有manifest属性的HTML页面时,页面本身被认为是Web应用程序的一部分,因此您不需要在清单文件本身中列出它。但是,如果您的Web应用程序跨越多个页面,则应在清单文件中列出所有HTML页面,否则浏览器将不知道需要下载和缓存其他HTML页面。

我有类似的问题,我想最终通过AJAX加载页面内容。


1

在appCache中进行缓存是一个两阶段的过程:首先检查缓存清单(在这种情况下,页面正在加载时),然后如果其内容已更改,则重新加载该内容。然而,在您的情况下,此时陈旧的页面已经被加载和显示。

最简单的解决方法是从appCache中明确排除该页面(但不包括.js文件),以便仅缓存js而不是页面。听起来您可能已经想到了这一点,因为您正试图通过将页面放在网络区域来实现它。请检查该排除是否正确,因为这似乎是问题所在,并且该页面上的html缓存属性是否设置正确。


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