无法让简单的 html5 清单缓存工作!



我想让一个简单的html5 webcache工作。

这是我唯一的html页面,index.html:

<!DOCTYPE HTML>
<html manifest="./main.manifest">
  <body>
    <p>Hi.</p>
  </body>
</html>

这是我唯一的缓存文件main.manifest:

CACHE MANIFEST
# 2011-05-02-03
index.html

我在apache共享主机上运行,我把一个。htaccess文件放在我的web目录下这两个文件在那里,因为我想也许我需要定义mime类型:

AddType text/cache-manifest .manifest

所以最后我在那个目录下有这三个文件:

index.html
main.manifest
.htaccess

当我从我的mac上访问chrome浏览器,从我的iphone上访问safari浏览器,或者从我的android 2.3设备上访问chrome浏览器时,什么都没有发生,页面只是像往常一样加载。如果我打开飞行模式(杀死所有连接),页面无法加载(所以我猜缓存失败)。

我在这里错过了什么?

感谢

------------更新------------------

我认为mime类型没有被正确识别。我将。htaccess更新为:

AddType text/cache-manifest manifest

现在,如果我运行在谷歌chrome与控制台打开,我看到:

Document was loaded from Application Cache with manifest
http://example.com/foo/main.manifest
Application Cache Checking event
Application Cache NoUpdate event

当我加载网页时,Firefox提示我要将网站存储到磁盘上,这很好。看起来它也在android 2.3.4上工作。浏览器仍然提示"无法加载此页面,因为您没有连接到互联网",但它还是加载了。

谢谢!

首先,您在mime类型声明上第一次是正确的。应该是这样的:

AddType text/cache-manifest .manifest

接下来,阅读这段来自Dive Into HTML5:

问:我需要在我的缓存清单中列出我的HTML页面吗?A:是也不是。如果您的整个web应用程序包含在一个页,只需确保该页使用清单属性。导航到带有清单的HTML页面时属性,则假定页面本身是web的一部分应用程序,因此不需要在清单文件本身中列出它。但是,如果您的web应用程序跨越多个页面,则应该列出清单文件中的所有HTML页面,否则浏览器就不会知道还有其他HTML页面需要保存已下载并缓存。
因此,在这种情况下,不需要缓存清单。浏览器将自动缓存您的页面(只要它是唯一的资源,例如CSS文件或Javascript文件)。

更多信息,请访问上面的链接

我在使用"显式缓存"项目时遇到了一些麻烦,所以我通常这样设置:

CACHE MANIFEST
# 2011-05-02-03
CACHE:
index.html

但另一个答案是正确的,浏览器将自动缓存任何包含应用程序缓存清单的url。

我建议使用Chrome的JavaScript控制台-它输出应用程序缓存事件,因为他们正在发生,包括错误。

最新更新