在用户没有与因特网链接时,能够正常访问站点或应用,在用户与因特网链接时,更新用户机器上的缓存文件。
原理:HTML5的离线存储是基于一个新建的.appcache文件的缓存机制(不是存储技术),经过这个文件上的解析清单离线存储资源,这些资源就会像cookie同样被存储了下来。以后当网络在处于离线状态下时,浏览器会经过被离线存储的数据进行页面展现。
如何使用:
一、页面头部像下面同样加入一个manifest的属性;css
<!DOCTYPE HTML> <html manifest = "cache.manifest"> ... </html>
二、在cache.manifest文件的编写离线存储的资源;
html
CACHE MANIFEST #v0.11 CACHE: js/app.js css/style.css NETWORK: resourse/logo.png FALLBACK: / /offline.html
三、在离线状态时,操做window.applicationCache进行需求实现。segmentfault
那么浏览器是怎么对离线的资源进行管理和加载的呢?这里须要分两种状况来讨论。浏览器
在线的状况下,浏览器发现html头部有manifest属性,它会请求manifest文件,若是是第一次访问app,那么浏览器就会根 据manifest文件的内容下载相应的资源而且进行离线存储。若是已经访问过app而且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,然 后浏览器会对比新的manifest文件与旧的manifest文件,若是文件没有发生改变,就不作任何操做,若是文件改变了,那么就会从新下载文件中的 资源并进行离线存储。缓存
离线的状况下,浏览器就直接使用离线存储的资源。服务器
这个过程当中有几个问题须要注意。cookie
若是服务器对离线的资源进行了更新,那么必须更新manifest文件以后这些资源才能被浏览器从新下载,若是只是更新了资源而没有更新manifest文件的话,浏览器并不会从新下载资源,也就是说仍是使用原来离线存储的资源。网络
对于manifest文件进行缓存的时候须要十分当心,由于可能出现一种状况就是你对manifest文件进行了更新,可是http的缓存 规则告诉浏览器本地缓存的manifest文件还没过时,这个状况下浏览器仍是使用原来的manifest文件,因此对于manifest文件最好不要设 置缓存。app
浏览器在下载manifest文件中的资源的时候,它会一次性下载全部资源,若是某个资源因为某种缘由下载失败,那么此次的全部更新就算是失败的,浏览器仍是会使用原来的资源。code
在更新了资源以后,新的资源须要到下次再打开app才会生效,若是须要资源立刻就能生效,那么可使用window.applicationCache.swapCache()
方法来使之生效,出现这种现象的缘由是浏览器会先使用离线资源加载页面,而后再去检查manifest是否有更新,因此须要到下次打开页面才能生效。
详细的使用请参考:[有趣的HTML5:离线存储](http://segmentfault.com/a/1190000000732617)HTML5的离线储存