html5之创建离线Web应用程序

离线应用程序缓存功能允许我们指定Web应用程序所需的全部资源,

这样浏览器就能在加载HTML文档时把它们都下载下来。

1)定义浏览器缓存:

启用离线缓存——创建一个清单文件,并在html元素的manifest属性里引用它;

指定离线应用程序里要缓存的资源——在清单文件的顶部或者CACHE区域里列出资源;

指定资源不可用时要显示的备用内容——在清单文件的FALLBACK区域里列出内容;

指向始终向服务器请求的资源——在清单文件的BETWORK区域里列出内容;

示例:首先创建fruit.appcache的清单文件

    CACHE MANIFEST  

    example.html
    banana100.png  

    FALLBACK:
    * 404.html  

    NETWORK:
    cherries100.png  

    CACHE:
    apple100.png  

再创建404.html文件,用于链接指向的html文件不在离线缓存中就可以用它来代替

<!DOCTYPE HTML>
<html manifest="fruit.appcache">
    <head>
        <title>Offline</title>
    </head>
    <body>
      <h1>您要的页面找不到了!</h1>
      或许您可以帮我们找找孩子!
    </body>
</html>

最后创建需要启用离线缓存的html文件

<!DOCTYPE HTML>
<html manifest="fruit.appcache">
    <head>
        <title>Example</title>
        <style>
            img {border: medium double black; padding: 5px; margin: 5px;}
        </style>
    </head>
    <body>
        <img id="imgtarget" src="banana100.png"/>
        <div>
            <button id="banana">Banana</button>
            <button id="apple">Apple</button>
            <button id="cherries">Cherries</button>
        </div>
        <a href="otherpage.html">Link to another page</a>
        <script>
            var buttons = document.getElementsByTagName("button");
            for (var i = 0; i < buttons.length; i++) {
                buttons[i].onclick = handleButtonPress;
            }

            function handleButtonPress(e) {
                document.getElementById("imgtarget").src = e.target.id + "100.png";
            }
        </script>
    </body>
</html>

2)检测浏览器状态:

window.navigator.online——如果浏览器确定为离线就返回false,如果浏览器可能在线则返回true;

3)使用离线缓存:

可以通过调用window.applicationCache属性直接使用离线缓存,它会返回一个ApplicationCache对象;

ApplicationCache对象成员:

update()——更新缓存以确保清单里的项目都已下载了最新的版本;

swapCache()——交换当前缓存与较新的缓存;

status——返回缓存的状态;

3.1)ApplicationCache对象的status属性值:

0——UNCACHED——此文档没有缓存,或者缓存数据尚未被下载;

1——IDLE——缓存没有执行任何操作;

2——CHECKING——浏览器正在检查清单或清单所指定项目的更新;

3——DOWNLOADING——浏览器正在下载清单或内容的更新;

4——UPDATEREADY——有更新后的缓存数据可用;

5——OBSOLETE——缓存数据已经废弃,不应该再使用了。这是请求清单文件时返回HTTP状态码4xx所造成的

(通常表明清单文件已被移走/删除);

3.2)ApplicationCache对象定义的事件,在缓存状态改变时触发:

checking——浏览器正在获取初始清单或者检查清单更新;

noupdate——没有更新可用,当前的清单是最新版;

downloading——浏览器正在下载清单里指定的内容;

progress——在下载阶段中触发;

cached——清单里指定的所有内容都已被下载和缓存了;

updateready——新资源已下载并且可以使用了;

obsolete——缓存已废弃;

CACHE MANIFEST

CACHE:
example.html
banana100.png
cherries100.png
apple100.png

FALLBACK:
* offline2.html 
<!DOCTYPE HTML>
<html manifest="fruit.appcache">
    <head>
        <title>Example</title>
        <style>
            img {border: medium double black; padding: 5px; margin: 5px;}
            div {margin-top: 10px; margin-bottom: 10px}
            table {margin: 10px; border-collapse: collapse;}
            th, td {padding: 2px;}
            body > * {float: left;}
        </style>
    </head>
    <body>
        <div>
            <img id="imgtarget" src="banana100.png"/>
            <div>
                <button id="banana">Banana</button>
                <button id="apple">Apple</button>
                <button id="cherries">Cherries</button>
            </div>
            <div>
                <button id="update">Update</button>
                <button id="swap">Swap Cache</button>
            </div>
            The status is: <span id="status"></span>
        </div>
        <table id="eventtable" border="1">
            <tr><th>Event Type</th></tr>
        </table>
        <script>
            var buttons = document.getElementsByTagName("button");
            for (var i = 0; i < buttons.length; i++) {
                buttons[i].onclick = handleButtonPress;
            }

            window.applicationCache.onchecking =  handleEvent;
            window.applicationCache.onnoupdate = handleEvent;
            window.applicationCache.ondownloading = handleEvent;
            window.applicationCache.onupdateready = handleEvent;
            window.applicationCache.oncached = handleEvent;
            window.applicationCache.onobselete = handleEvent;

            function handleEvent(e) {
                document.getElementById("eventtable").innerHTML +=
                    "<tr><td>" + e.type + "</td></td>";
                checkStatus();
            }

            function handleButtonPress(e) {
                switch (e.target.id) {
                    case 'swap':
                        window.applicationCache.swapCache();
                        break;
                    case 'update':
                        window.applicationCache.update();
                        checkStatus();
                        break;
                    default:
                        document.getElementById("imgtarget").src = e.target.id
                            + "100.png";
                }
            }

            function checkStatus() {
                var statusNames = ["UNCACHED", "IDLE", "CHECKING", "DOWNLOADING",
                                   "UPDATEREADY", "OBSOLETE"];
                var status = window.applicationCache.status;
                document.getElementById("status").innerHTML = statusNames[status];
            }

        </script>
    </body>
</html>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-06 03:02:39

html5之创建离线Web应用程序的相关文章

【JavaScript】使用面向对象的技术创建高级 Web 应用程序

本文讨论: JavaScript 是基于原型的语言 用 JavaScript 进行面向对象的编程 JavaScript 编码技巧 JavaScript 的未来 本文使用了以下技术: JavaScript   目录 JavaScript 对象是词典 JavaScript 函数是最棒的 构造函数而不是类 原型 静态属性和方法 闭包 模拟私有属性 从类继承 模拟命名空间 应当这样编写 JavaScript 代码吗? 展望 最近,我面试了一个有五年 Web 应用程序开发经验的软件开发人员.四年半来她一直

javascript面向对象创建高级 Web 应用程序

 目录 JavaScript 对象是词典 JavaScript 函数是最棒的 构造函数而不是类 原型 静态属性和方法 闭包 模拟私有属性 从类继承 模拟命名空间 应当这样编写 JavaScript 代码吗? 展望 最近,我面试了一个有五年 Web 应用程序开发经验的软件开发人员.四年半来她一直在从事 JavaScript 相关的工作,她自认为 JavaScript 技能非常好,但在不久之后我就发现实际上她对 JavaScript 知之甚少.话虽这样说,但我确实没有责备她的意思.JavaScrip

IDEA 2017.3 新版本中创建 JSF Web 应用程序缺少 web.xml 的解决办法

IDEA 2017.3 新版本中默认创建一个 Web 应用程序很可能不会自动创建 web.xml 文件.虽然说从 JavaEE 6.0 开始 Servlet 3.0 规范中就新增了一些注解可以免去传统 web.xml 中的设置,但是这也有局限性.比如,针对 JSF 应用程序,必须在 web.xml 中增加系统内建的 JSF Facelets Servlet 的配置以及部署后自动启动等设置,而且包括 context-param.welcome-file-list 等等并没有 Servlet 3.0

使用面向对象的技术创建高级 Web 应用程序

Ray Djajadinata 本文讨论: JavaScript 是基于原型的语言 用 JavaScript 进行面向对象的编程 JavaScript 编码技巧 JavaScript 的未来 本文使用了以下技术: JavaScript   目录 JavaScript 对象是词典 JavaScript 函数是最棒的 构造函数而不是类 原型 静态属性和方法 闭包 模拟私有属性 从类继承 模拟命名空间 应当这样编写 JavaScript 代码吗? 展望 最近,我面试了一个有五年 Web 应用程序开发经

asp网络编程:创建移动Web应用程序

介绍 现今移动设备已成为我们生活中的一部分,我们当中的许多人已离不开它们.当这些移动设备连接到Internet时,移动设备的力量将无穷无尽.我们可以在任何时间地点给用户发送数据.典型的移动应用程序是在服务器上使用WML, WMLScript和WBMP开发的. 对于动态WML应用程序,开发者可以使用ASP, JSP, PHP等等.移动设备包括蜂窝电话.寻呼机.掌中浏览器.袖珍PC和车载PC.这些设备中少数支持WML,少数支持HTML,更少数支持同时支持WML和HTML.如果你想确保你的应用程序能在

HTML5离线Web应用实战:五步创建成功

[IT168 技术]HTML5近十年来发展得如火如荼,在HTML 5平台上,视频,音频,图象,动画,以及同电脑的交互都被标准化.HTML功能越来越丰富,支持图片上传拖拽.支持localstorage.支持web sql database.支持文件存储api等等.它任重而道远,致力于将Web带入一个更为成熟的应用平台.在所有炫酷特性中,最让我喜欢的是它具有离线缓存Web应用的功能. 开发离线Web 应用程序:三大核心功能 在开发支持离线的 Web 应用程序时,开发者通常需要使用以下三个方面的功能:

C#MVC中创建多模块web应用程序

当一个应用程序有越来越多的子模块后,应用程序将变得越来越大,复杂度也越来越高,应用程序也越来越难维护.如果把每个子模块,独立分成不同的web应用程序,则这个项目将易于维护.关于这个的好处,我也描述得不好.总之,模块分开,不同程序员的不同模块,不互相影响,一个庞大的项目,如果分为多个Web应用程序,那将更容易维护. 那么,如何将一个大的web应用程序,分成多个不同的web应用程序呢. 直接记录实现过程: 1.首先,我们创建一个主项目,其他分离项目,都将通过这个主项目为路口.如图所示,我们创建一个W

IBM的云平台Bluemix使用初体验——创建Go语言 Web 应用程序,添加并使用语言翻译服务

概述 上篇讲了:创建PHP Web 应用程序,添加并使用语言翻译服务 通过本文学习,你将能够在IBM的云平台Bluemix上创建自己的Go语言 Web 应用程序,添加并使用语言翻译服务,发布自己的GO语言Web应用到云服务器上. 本地开发测试环境:Windows 7 x64,Go,与其它Web后端语言不同,Go语言需要自己编写Web服务器. 有关本地环境的搭建与基础学习,请参考: <Go语言入门>如何在Windows下安装Go语言编程环境 <Go语言入门>第一个Go语言程序--He

离线web存储

本地缓存与浏览器网页的缓存 本地缓存与浏览器网页缓存的区别 离线缓存需要 本地缓存web应用程序的所有html css. js 文件本地缓存服务于整个web应用 浏览器网页缓存只服务于单个网页, 任何网页都具有缓存,而本地缓存只缓存你指定缓存的网页.网页缓存不安全.不可靠,我们不知道网站中缓存了哪些网页,缓存了哪些网页上的资源.本地缓存是可靠,我们可以控制对那些没内容进行缓存,开发人员还可用编程的手段来控制缓存的更新,利用缓存对象的属性.状态事件开发更强大的离线web应用. manifest文件