HTML5 - 离线应用的创建与使用详解2(使用js检测连接、监听更新)
作者:hangge | 2017-07-12 08:10
一、使用 JavaScript 检测连接情况
1,实现原理
使用 JavaScript 检测浏览器当前是否在线的一个诀窍,就是利用后备区块。让浏览器根据应用是否在线分别加载相同 JS 函数的不同版本。
注意:这里的在线除了指计算机连接了英特网,浏览器还要能连接到 Web 服务才行。否则也属于离线。
2,实现步骤
(1)首先在描述文件后备区块中添加如下文件对:
FALLBACK: online.js offline.js
(2)这两个 js 文件内容很简单,就包含一个简单的函数:
--- online.js ---
function isSiteOnline() {
return true;
}
--- offline.js ---
function isSiteOnline() {
return false;
}
(3)在原始的网页中引用 online.js,同时页面加载完毕后将当前的连接状态弹出显示。
<!DOCTYPE html>
<html manifest="hangge.appcache">
<head>
<meta charset="utf-8">
<title>hangge.com</title>
<script type="text/javascript" src="online.js"></script>
<script type="text/javascript" src="js/jquery.js"></script>
</head>
<script type="text/javascript">
$(document).ready(function(){
if(isSiteOnline()){
alert("当前能连上Web服务器!");
}else{
alert("当前无法连上Web服务器!");
}
});
</script>
<body>
</body>
</html>
3,运行效果
下面是当应用在线时的效果:

二、使用 javascript 监听更新
通过 applicationCache 对象的 status 属性,可以知道浏览器当前在干什么,是在检测更新的描述文件,还是在下载新文件,或者做替他事情。
同时不同属性值都会有对应的事件,这些事件会在 applicationCache 的状态变化时触发,具体事件见下方。
1,缓存事件
- onChecking:浏览器在发现网页中的 manifest 属性时,会触发这个事件,并向 web 服务器请求描述文件。
- onNoUpdate:如果浏览器已经下载了描述文件,而描述文件并未改变,浏览器就会触发这个事件,然后不再做什么了。
- onDownloading:浏览器在开始下载描述文件(以及其中列出的文件)之前会触发这个事件。除了第一次下载描述文件时,更新文件时都会触发这个事件。
- onProgress:下载文件期间,浏览器会不断地触发这个事件,以报告进度。
- onCached:当新离线应用的所有文件第一次下载完成后,会触发这个事件。此后,不会再发生事件。
- onUpdateReady:这个事件表示已经取得了更新的内容。此时,新内容已经可以使用了,但除非重新加载页面,否则不会在浏览器窗口中出现。此后,不会再发生事件。
- onError:缓存期间发生任何问题都会触发这个事件。可能是无法连接 Web 服务器(这种情况下,会把页面切换到离线浏览模式),或者描述文件包含错误的语法,或者缓存的资源不存在。此后,不会再发生事件。
- onObsolete:在检测更新时,浏览器发现描述文件不存在了,就会触发这个事件。然后,它会清除缓存。下次再加载页面时,浏览器会从 web 服务器取得实时、最新的在线版页面。
2,onUpdateReady事件使用
上面各个事件中最有用的便是 onUpdateReady 了,表示浏览器已经下载了新版本的应用。虽然新版本已经可以使用了,但浏览器窗口中显示的仍然是旧版本的内容。
利用这个事件可以告诉访客刷新页面,浏览新版本的内容,就像桌面应用下载完毕更新之后做的那样。
<!DOCTYPE html>
<html manifest="hangge.appcache">
<head>
<meta charset="utf-8">
<title>hangge.com</title>
</head>
<script type="text/javascript">
window.onload = function() {
applicationCache.onupdateready = function() {
if(confirm("当前有可用的新版本。是否重新加载?")){
window.location.reload();
}
}
}
</script>
<body>
</body>
</html>
上面样例代码,当离线应用有新版本可以使用时会提示用户。在用户确认后会重新加载页面。

3,update()方法介绍
除了 status 属性和上述事件之外,applicationCache 对象还有两个方法:update() 和 swapCache()。
(1)调用 update 方法只会让浏览器检测是否有新的描述文件。如果有,浏览器就会在后台下载新文件。否则,什么也不做。
applicationCache.update();
(2)虽然浏览器能自动检测更新,但我们也可以调用 update() 方法让它去检测,以便及时发现更新的描述文件。这个方法很适合那些生命期长的Web应用,比如一打开就是一整天的页面。
全部评论(0)