`
lucifinilhades
  • 浏览: 86026 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

HTML5 离线应用程序【2】

阅读更多

applicationCache对象

applicationCache对象代表本地缓存,可以用它来通知用户本地缓存中已经被更新,也允许用户手工更新本地缓存。在浏览器与服务器的交互过程中,当浏览器对本地缓存进行更新,将入新的资源文件时,会触发applicationCache对象的updateready事件,通知本地缓存已经被更新。可以利用该事件告诉用户本地缓存已经被更新,用户需要手工刷新页面来得到最新版本的应用程序,代表如下所示:

applicationCache.addEventListener("updateready", function(event) {
    // 本地缓存已被更新,通知用户。
    alert("本地缓存已被更新,可以刷新页面来得到本程序的最新版本。");
}, false);

另外可以通过applicationCache对象的swapCache()方法来控制如何进行本地缓存的更新及更新的时机。

swapCache()方法

该方法用来手工执行本地缓存的更新,它只能在applicationCache对象的updateReady事件被触发时调用,updateReady事件只有在服务器上的manifest文件被更新,并且把manifest文件中所要求的资源文件下载到本地后触发。该事件的含义是“本地缓存准备被更新”。当这个事件被触发后,可以用swapCache()方法来手工进行本地缓存的更新。

当本地缓存的容量非常大,本地缓存的更新工作将需要相对较长的时间,而且还会把浏览器锁住。这时最好有个提示,告诉用户正在进行本地缓存的更新,代码如下:

applicationCache.addEventListener("updateready", function(event) {
    // 本地缓存已被更新,通知用户。
    alert("正在更新本地缓存……");
    applicationCache.swapCache();
    alert("本地缓存更新完毕,可以刷新页面使用最新版应用程序。");
}, false);

在以上代码中,如果不使用swapCache()方法,本地缓存一样会被更新,但是,更新的时候不一样。如果不调用该方法,本地缓存将在下一次打开本页面时被更新;如果调用该方法,则本地缓存将会被立刻更新。因此,可以使用confirm()方法让用户选择更新折时机,是立刻更新还是下次打开页面时更新,特别是当用户可能正在页面上执行一个较大的操作的时候。

另外,尽管使用swapCache()方法立刻更新了本地缓存,但是并不意味着我们页面上的图像和脚本文件也会被立刻更新,它们都是在重新打开本页面时才会生效。较完整的示例如下:

HTML页面代码:

<!DOCTYPE html>
<html manifest="swapCache.manifest">
<head>
    <meta charset="UTF-8"/>
    <title>swapCache()方法示例</title>
    <script type="text/javascript" src="js/script.js"></script>
</head>
<body>
    <p>swapCache()方法示例。</p>
</body>
</html>

以上页面所使用的脚本文件代码如下:

document.addEventListener("load", function(event) {
    setInterval(function() {
        // 手工检查是否有更新
        applicationCache.update();
    }, 5000);
    applicationCache.addEventListener("updateready", function(event) {
        if(confirm("本地缓存已被更新,需要刷新页面获取最新版本吗?")) {
            // (3)手工更新本地缓存
            applicationCache.swapCache();
            // 重载页面
            location.reload();
        }
    }, false);
});

该页面使用的manifest文件内容如下:

CACHE MANIFEST
#version 1.20
CACHE:
script.js

applicationCache对象的事件

首次访问网站:

  1. 浏览器请求访问网站;
  2. 服务器返回请求网页,例如index.html;
  3. 浏览器发现该网页具有manifest属性,触发checking事件,检查manifest文件是否存在。不存在时,触发error事件,表示manifest文件未找到,不执行步骤6开始的交互过程;
  4. 浏览器解析index.html网页,请求页面上所有资源文件;
  5. 服务器返回所有资源文件;
  6. 浏览器处理manifest文件,请求manifest中所有要求本地缓存的文件,包括index.html页面本身,即使刚才已经请求过该文件。如果要求本地缓存所有文件,这将是一个比较大的重复的请求过程;
  7. 服务器返回所有要求本地缓存的文件;
  8. 浏览器触发downloading事件,然后开始下载这些资源。在下载的同时,周期性地触发progress事件,开发人员可以用编程的手段获取多少文件已被下载,多少文件仍然处于下载队列等信息;
  9. 下载结束后触发checked事件,表示首次缓存成功,存入所有要求本地缓存的资源文件。

再次访问网站,步骤(1)~(5)同上,在步骤(5)执行完之后,浏览器将核对manifest文件是否被更新,若没有被更新,触发noupdate事件,步骤(6)开始的交互过程不会被执行。如果被更新了,将继续执行后面的步骤,在步骤(9)中不触发checked事件,而是触发updateready事件,这表示下载结束,可以通过刷新页面来使用更新后的本地缓存,或调用swapCache()方法来立刻使用更新后的本地缓存。

另外,在访问缓存名单时如果返回一个HTTP404错误(页面未找到),或者401错误(永久消失),则触发obsolete事件。

在整个过程中,如果任何与本地缓存有关的处理中发生错误的话,都会触发error事件。可能会触发error事件的情况分为以下几种:

  • 缓存名单返回一个HTTP404错误或HTTP401错误;
  • 缓存名单被找到且没有更改,但引用缓存名单的HTML页面不能正确下载;
  • 缓存名单被找到且被更改,但浏览器不能下载某个缓存名单中列出的资源;
  • 开始更新本地缓存时,缓存名单再次被更改。
分享到:
评论

相关推荐

    HTML5离线应用

    HTML5离线应用是现代网页开发中的一个重要特性,它允许用户在没有网络连接时仍然能够访问和使用某些网站或应用程序。这一功能通过HTML5的离线存储标准实现,包括Application Cache(应用程序缓存)和Service Worker...

    《apache2下部署的配置离线应用搭建及html5离线应用流程介绍 》附件

    本文将深入探讨如何在Apache2环境下设置离线应用,并结合HTML5的相关特性,实现一个完整的离线应用流程。 一、Apache2简介 Apache2是一款开源且免费的Web服务器软件,具有强大的稳定性和可扩展性。它支持多种操作...

    HTML5离线应用程序.pdf

    HTML5离线应用程序的核心在于利用`离线存储`这一特性,使得Web应用即使在无网络连接的情况下也能继续运行。这主要依赖于HTML5的`Application Cache`(应用程序缓存),也就是我们常说的manifest文件。 `Application...

    使用 HTML5 开发离线应用

    HTML5 离线应用开发是一项关键特性,它允许用户在无网络连接的情况下仍然可以访问和使用部分Web应用程序。这一功能主要依赖于HTML5的离线缓存机制,通过一个称为`cache manifest`的文件来指定需要缓存的资源。当用户...

    html5 离线应用

    HTML5离线应用是现代Web开发中的一个重要特性,它允许应用程序在没有网络连接时也能运行。这一特性通过HTML5的离线存储标准实现,主要包括Application Cache(应用缓存)和Service Worker。这篇博客可能深入探讨了这...

    html5离线阅读

    HTML5 离线阅读功能使得网络应用程序即使在网络断开的情况下也能正常运行,极大地提升了用户体验。这一特性通过离线缓存技术实现,允许用户在有网络连接时预先下载必要的资源,以便在离线状态下使用。 离线网络应用...

    HTML5离线数据库

    HTML5离线数据库,也被称为Web Storage,是HTML5的一项重要特性,旨在改善网页应用程序的离线存储能力,使得用户在没有网络连接时也能访问部分数据。这一特性由两个主要部分组成:`localStorage` 和 `sessionStorage...

    html5离线存储课程代码

    HTML5离线存储是Web应用程序实现离线工作的关键技术,它允许网页在用户离线时仍然可以访问和使用部分数据,极大地提升了用户体验。本课程代码主要围绕这个主题展开,旨在帮助开发者掌握HTML5离线存储的基本原理和...

    使用 HTML5 开发离线应用[转载]

    ### 使用HTML5开发离线应用的关键技术解析 在信息技术领域,HTML5的出现标志着网络应用的一个重大飞跃,尤其是在离线应用的开发上。HTML5,作为第五代超文本标记语言的标准,不仅增强了网页的表现力,更引入了一...

    html5离线处理实例

    HTML5离线处理是Web应用程序的一个重要特性,它允许网页在没有互联网连接的情况下也能正常运行,从而提升用户体验。这一功能主要依赖于HTML5的离线存储标准,包括App Cache(应用程序缓存)和Service Worker(服务...

    html5离线缓存简单demo

    HTML5离线缓存,也称为App Cache,是HTML5引入的一种增强网页应用程序离线运行能力的技术。它允许开发者将一部分网页资源(如HTML、CSS、JavaScript、图片等)存储在本地,使得用户在离线状态下依然能访问这些页面,...

    使用HTML5创建Flex的离线应用程序

    互联网已经日益成为应用程序开发的默认平台...由于采用了HTML页面形式的用户界面,客户端的数据处理能力较C/S应用程序有所下降,用户体验也相对糟糕,无法像C/S那样使用丰富的效果来展示数据。2.浏览器必须总是具有网络

    html5离线存储实例

    HTML5离线存储是现代网页应用中的一个重要特性,它使得应用程序在无网络连接或网络状况不佳时仍能正常运行。这个技术主要分为两种形式:Application Cache(应用缓存)和IndexedDB。 首先,我们来看看Application ...

    腾讯X5内核离线使用Demo

    AppCache定义了一个离线应用的缓存清单,使得在离线状态下可以访问指定的网页;而Service Worker则更加灵活,可以在后台运行,拦截网络请求,实现更精细的缓存控制和数据同步。 在"OfflineX5Demo"中,可能包含了...

    Remember先进的离线Todo应用程序

    "Remember"是一款高级的离线Todo应用程序,专为那些需要高效管理任务但又不希望受网络连接限制的用户设计。这款应用充分利用了现代Web技术,尤其是JavaScript开发的优势,使其即使在无互联网连接的情况下也能正常...

    html5离线学习资料

    离线存储功能如离线应用缓存(App Cache)和Service Worker,使得网页可以在离线状态下依然能够运行部分功能,这对于移动设备上的应用尤其重要。 多媒体支持是HTML5的一大亮点。和元素的引入,使得网页可以直接嵌入...

    html5 离线数据库

    HTML5离线数据库,也被称为Web Storage,是HTML5的一项重要特性,主要为Web应用程序提供了在本地存储数据的能力,使得应用程序即使在网络不畅或者离线状态下也能正常运行。这一特性由两个部分组成:localStorage和...

    HTML5_离线存储技术

    HTML5 离线存储技术是现代Web开发中的一个重要特性,它使得网页和应用程序即使在网络不稳定或者无网络连接的情况下也能正常运行。这项技术的核心在于利用HTML5的`Application Cache`(应用缓存)或者称为`Cache ...

    Vue应用程序的在线离线状态

    本篇文章将深入探讨如何在Vue应用程序中处理在线和离线状态,以及如何使用特定插件来实现这一目标。 首先,我们需要理解`navigator.onLine`属性,这是JavaScript内置的一个API,用于检测用户设备当前是否连接到...

Global site tag (gtag.js) - Google Analytics