返回 导航

HTML5 / CSS3

hangge.com

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)

回到顶部