要实现文件缓存在客户端,可以使用根节点html元素的manifest属性,引用一个清单文件,使用UTF-8编码,列出了离线访问应用时需要缓存的文件清单。
manifest属性定义的值是一个文件路径,所对应的MIME类型应该为text/cache-manifest。
Eg:
html文件(test.html):
<htmlmanifest=”test.manifest”>
<head>
<scriptsrc=”test.js”></script>
<linkrel=”stylesheet” href=”test.css”>
</head>
<body>
<imgsrc=”images/icon_1.png”>
<imgsrc=”images/icon_2.png”>
<imgsrc=”images/icon_3.png”>
</body>
manifest文件:
CACHE MANIFEST
#缓存清单文件
CACHE:
test.html
test.js
test.css
images/icon_1.png
images/icon_2.png
images/icon_2.png
第一次请求网页后会缓存到本地浏览器,即使断网也可以访问网页,并且执行其中的业务逻辑;
要更新离线存储文件,必须更新manifest文件;否则,即使存储文件发生改变,也没有作用,例如CSS文件改变内容样式,如果不改变manifest文件,不断刷新,网页也不会发生改变;
可以清楚浏览器manifest文件导致重新下载或者使用window.applicationCache对象控制更新。
缓存清单文件格式:
CACHEMANIFEST
#version1.0
#CACHEMANIFEST下必须空一行或者填充注释
#缓存的文件列表
CACHE:
#必须在线访问
NETWORK:
test.jsp
#重定向
FALLBACK:
/test.jsp /404.html #请求test.jsp出错转向404.html页面
DOM方法处理离线应用:
HTML5定义了ApplicationCache接口规范离线缓存的控制。
获取缓存:varcache = window.applicationCahce ; //cache当前文档的ApplicationCache对象
检查状态:varstatus = cache.status; //具有5种状态:UNCACHED缓存宿主与应用宿主无关联、IDLE应用缓存为最新、CHECKING有关联,更新状态为checking、DOWNLOADING有关连,更新状态为downloading、UPDATEREADY更新状态为idle,但缓存不是最新、OBSOLETE有关联,更新状态obsolete
更新缓存:
(1)cache.update() //浏览器更新,前提是manifest更新过,
(2)cache.swapCache() //状态为UOPDATEREADY时将旧缓存更新为新的,不会加载新资源,会更新manifest文件,在下次加载时更新资源。