js前端开发—离线应用篇—离线检测和应用缓存

2017-03-09  本文已影响0人  BeYanJin

参考资料

《Javascript高级层序设计》(第3版)
JavaScript | MDN
HTML5系列之——applicationCache对象

前言

本人菜鸟,入IT只为当鼓励师。本编文章主要介绍 如何判断设备是在线还是离线 (navigator.onLine 属性,online和offline事件),如何实现应用缓存(描述文件,<html>的mainfest属性,applicationCache对象)。

一、什么是离线Web应用

二、开发离线应用的条件

三、使用HTML5开发离线应用

1. 离线检测

1.1 navigator.onLine 属性

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>判断设备是否能上网</title>
</head>
<body>
    <p>你现在的状态是 <script>document.write(navigator.onLine ? "在线" : "离线");</script></p>
</body>
</html>
各个浏览器对 navigator.online 的兼容性

1.2 online 和 offline 事件

<!DOCTYPE html>
<html>
<head>
    <title>Online Events Example</title>
<script type="text/javascript" src="EventUtil.js"></script>
</head>
<body>
    <p>你现在的状态是 <span id="status"><script>document.write(navigator.onLine ? "在线" : "离线");</script></span></p>
    <script>
        EventUtil.addHandler(window, "online", function(){
            document.getElementById("status").innerHTML = "在线";
        });
        EventUtil.addHandler(window, "offline", function(){
            document.getElementById("status").innerHTML = "离线";
        });
    </script>
</body>
</html>
各种兼容性问题

2. 应用缓存

HTML5的应用缓存,简称为appcache。Appcache就是从浏览器的缓存中分出来的一块缓存区。可以使用一个描述文件(manifest file),列出要下载和缓存的资源,这样就能在这个缓存中保存数据了。

2.1 检测浏览器是否支持应用缓存

if (window.applicationCache) {
    //浏览器支持离线应用
}

2.2 描述文件

2.3 将描述文件和页面关联

<html manifest='./offline.appcche'>

2.4 window.applicationCache 对象

2.4.1 status属性
2.4.2 可绑定在applicationCache对象上的事件
2.4.3 update() 方法

update()一经调用,应用缓存就会去检查描述文件是否更新,触发checking事件,然后页面就会像刚刚加载一样,继续执行后续操作。如果触发了cached事件,则说明应用缓存已经准备就绪,不会再发生其他操作。

2.4.4 swapCache()方法

如果触发了updateready事件,则说明新版本的应用缓存已经可用,需要调用swapCache()方法来启用新的应用缓存。

applicationCache.onupdateready = function(){
    applicationCache.swapCache();
};
2.4.5 注意事项

浏览器检查清单文件,以及更新缓存的操作是异步的,因此可能是在载入旧缓存之后进行,因此可能需要载入两次才能显示最新的内容,因此需要提示用户。

window.applicationCache.onupdateready = function(){
    var con = comfirm('有新内容可用,是否重新加载?');
    if(con){
        location.reload();
    }
}
上一篇下一篇

猜你喜欢

热点阅读