HTML5新特性之离线缓存技术-php中文网


当前第2页 返回上一页

不同的情况触发不同的事件。

事件列表:

(1).没有可用更新

如果应用程序已经缓存并且清单文件没有动,则浏览器会触发noupdate事件

(2).有可用更新

如果应用程序已经缓存并且清单元件有改动,则浏览器会触发downloading事件并开始下载和缓存清单文件中列举的所有资源。

随着下载过程的进行浏览器还会触发”progress”事件,在下载完成后,会触发”updateready”事件。

(3).首次载入新的应用程序

如果还未缓存应用程序,如上所述downloading,progress事件都会触发。但是,当下载完成后,浏览器会触发”cached”事件

而不是updateready事件

(4).浏览器处于离线状态

如果浏览器处于离线状态,它无法检查清单文件,同时它会触发“error”事件。

如果一个未缓存的应用程序引用了不存的清单文件,浏览器也会触发该事件

(5).清单文件不存在

如果浏览器处理在线状态,应用程序也已经缓存起来,但是清单文件不存在,浏览器会触发obsolete事件,并将该应用程序

从缓存中移除。


缓存状态:

缓存的状态可以通过window.applicationCache.status获得,其状态主要包括如下6种:

1

2

3

4

5

6

7

const unsigned short UNCACHED=0;//未缓存(应用程序没有设置manifest属性:未缓存)

const unsigned short IDLE=1;//空闲状态(清单文件已经检查完毕,并且已经缓存了最新的应用程序) 

const unsigned short CHECKING=2;//检查中(浏览器正在检查清单文件) 

const unsigned short DOWNLOADING=3;//下载中(浏览器正在下载并缓存清单中列举的所有文件)

const unsigned short UPDATEREADY=4;//更新准备中(已经下载和缓存了最新版的应用程序)

const unsigned short OBSOLETE =5;//过期状态(清单文件不存在,缓存将被清除) 

readonly attribute unsigned short status;

六、ApplicationCache对象还定义了两个方法update()和swapCache():

(1).update

显式调用了更新缓存算法以检测是否有最新版本的的应用程序。这导致浏览器检测同一个清单文件(并触发相同的事件),

这和第一次载入应用程序时的效果是一样的。

(2).swapCache

它告诉浏览器可以弃用老缓存,所有的请求都从新缓存中获取。注意,这并不会重新载入应用程序:所有已经载入的html文件

、图片、脚本等资源都不会改变。但是,之后的请求将从最新的缓存中获取。这会导致“版本错乱”的问题,因此一般不推荐使用

,除非应用程序设计得很好,确保这样的方式没有问题。只有ApplicationCache.UPDATEREADY和

ApplicationCache.ABSOLETE 时调用 swapCache()才有意义(当状态OBSOLETE时,调用它可以立即弃用废弃的缓存,

让之后所有的请求都通过网络获取)。如果状态属性是其他数值的时候调用swapCache()方法,它就会抛出异常。

七、如何判断在线还是离线状态?

离线web应用指的是将自己“安装”在应用程序缓存中的程序,使得哪怕在浏览器处于离线状态时依然可访问它。为了在离线状态可用,

Web应用需要可以告知别人自己是离线还是在线,同时当网络连接的状态发生改变时候也能“感知”到。通过navigator.onLine属性,

navigator.onLine是HTML5定义用来检测设备是在线还是离线。对应的值为false或true。但是不同浏览器表现并不一致。

IE 6+和Safari 5+能够正确的检测到网络已断开,并将navigator.onLine设为flase。

Firefox 3+和Opera 10.6+也支持navigator.onLine。但需要手动讲浏览器设置为脱机模式才能让浏览器正常工作。

Chrome 11及以上版本始终将navigator.onLine设为true。(不过作者的Chrome 21已经能正常使用了)

HTML5定义了online&offline事件用于监听网络状态变化。

window.addEventListener('online', callback); // 离线到上线

window.addEventListener('offline', callback); // 上线到离线

目前除了IE(IE只支持navigator.onLine属性)外,其他最新浏览器都支持这个事件。

八、离线Web应用实战。

通过一个简单的记事本程序――PermaNote,来解释如何使用。程序将用户的文本保存到localStorage中,并且在网络连接可用的时候,

将其上传到服务器,PermaNote只允许用户编辑单个笔记。

PermaNote应用包含3个文件,一个应用清单文件、一个html页面文件,一个实现逻辑的js文件。

Demo: http://xuanfengge.com/demo/201506/appcache/permanote.html

①.premanote.appcache部分:

1

2

3

4

5

6

CACHE MANIFEST

#  PermaNote v8

permanote.html

permanote.js

NETWORK:

note

②.permanote.html部分:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<!DOCTYPEHTML>

<html manifest= permanote.appcache”>

<head>

<title>PermaNote Editor</title>

<script src=” permanote.js”></script>

<style type=”text/css”>

#editor {width:100%;height:250px}

#statusline{width:100%}

</style>

</head>

<body>

<p id=”toobar”>

<button id=”savebutton”onclick = “save()”>save</button>

<button onclick = “sync()”>SyncNote</button>

<button onclick = “applicationCache.update()”>UpdateApplication</button>

<textarea id=”editor”></textarea>

<p id=”statusline”></p>

</p>

</body>

</html>


③.permanote.js部分

status()函数用于显示状态栏消息,save()函数将笔记本保存到服务器,sync()用于确保本地与服务器文本的同步。

应用程序的时间处理程序解释:

(1).onload

尝试和服务器同步,一旦有新版本的笔记并且完成同步后,就启用编辑器窗口。

save()和sync()函数发出HTTP请求,并在XMLHttpRequest对象上注册一个onload时间处理程序来获取上传或者

下载完成的提醒。

(2).onbeforeunload

在未上传前,把当前版本的笔记数据保存到服务器上。

(3).oninput

每当textarea输入框内容发生变化时,都将其内容保存到localStorage中,并启动一个计时器。当用户停止编辑超过5秒

,将自动把数据保存到服务器。

(4).onoffline

当浏览器进入离线状态时,在状态栏显示离线消息。

(5).ononline
当浏览器回到在线状态时,同步服务器,检查是否有新版本的数据,并且保存当前版本的数据。

(6).onupdateready

如果新版本的应用已缓存,则在状态栏展示消息告知用户。

(7).onnoupdate

如果应用程序缓存没有发生变化,则同时用户仍在运行当前版本。

以上就是HTML5新特性之离线缓存技术-php中文网的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

HTML5 indexeddb本地储存

javascript中比较运算符隐式类型转换的介绍(附示例)

字符编码是什么?HTML5如何设置字符编码?

HTML5之javascript多线程的详解

HTML5 canvas中绘制字体与图片以及图形模糊问题解决

HTML5如何制作一份邀请函?制作邀请函的方法(代码示例)

css3如何实现元素环绕中心点布局(代码示例)

浅谈HTML5的未来发展

canvas画直角坐标系

总结HTML5中新表单元素的使用方法及实例教程

更多相关阅读请进入《HTML5》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...