离线应用与客户端存储

相当多的时候,需要系统能支持设备不能上网的情况下仍然可以运行,HTML5吧离线应用作为重点。

开发离线web应用需要几个步骤,首先是确保应用知道设备是否能上网,一遍下一步执行正常的操作,然后,应用还必须能访问一定的资源(图像,JavaScript,css等),只有这样才能正常工作,最后,必须有一块本地空间用于保存数据,无论能否上网都不妨碍读写。

离线检测

HTML5定义了一个navigator.onLine属性,这个属性值为true表示设备能上网,值为false表示设备离线。在不同的浏览器之间,navigator.onLine有些许小差异。

  • IE6+和Safari 5+能够正常检测到网络已断开,并将navigator.onLine的值转换为false
  • FireFox3+和Opera 10.6+支持navigator.onLine属性,但是必须手动选中菜单项“文件-web开发人员(设置)-脱机工作”才能让浏览器正常工作
  • Chrome11及之前的版本始终将navigator.onLine属性设置为true,这是一个bug,当然已经被修复了 除了navigator.onLine属性外,为了更好的确定网络是否可用,HTML5还定义了两个事件:online和offline,当网络由离线变为在线或者由在线变为离线时,分别处罚这两个事件:
EventUtil.addHandler(window,"online",function(){
    alert("Online");
});
EventUtil.addHandler(window,"offline",function(){
    alert("Offline");
});

应用缓存

HTML5 引入了应用程序缓存(Application Cache),这意味着可对 web 应用进行缓存,并可在没有因特网连接时进行访问。 应用程序缓存为应用带来三个优势: 离线浏览 - 用户可在应用离线时使用它们 速度 - 已缓存资源加载得更快 减少服务器负载 - 浏览器将只从服务器下载更新过或更改过的资源

想要在缓存中保存数据,可以使用一个描述文件(manifest file)。列出要下载和缓存的资源。比如file.js文件,如果需要与页面关联起来,可以在<html>中的manifest属性指定这个文件的路径,<html manifest="/offline.manifest">,以上代码表示在offline.manifest中包含着描述文件,这个文件的MIME类型必须是text/cache-manifest。