




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
离线Web应用程序介绍在HTML5中新增了一个API,为离线Web应用程序的开发提供了可能性。为了让Web应用程序在离线状态时也能正常工作,就必须要把所有构成Web应用程序的资源文件,诸如:HTML文件、CSS文件、JavaScript脚本文件等放在本地缓存中,当服务器没有和Internet建立连接的时候,也可以利用本地缓存中的资源文件来正常运行Web应用程序。本地缓存与浏览器网页缓存的区别首先,本地缓存是为整个Web应用程序服务的,而浏览器的网页缓存只服务于单个网页,任何网页都具有网页缓存,而本地缓存只缓存那些指定缓存的网页。其次,网页缓存也是不安全、不可靠的,因为我们不知道在网站中到底缓存了哪些页面,以及缓存了网页上的哪些资源。而本地缓存是可靠的,我们可以控制对哪些内容进行缓存,不对哪些内容进行缓存,开发人员还可以用编程的手段来控制缓存的更新,利用缓存对象的各种属性、状态和事件来开发出更为强大的离线应用程序。manifest文件Web应用程序的本地缓存是通过每个页面的manifest文件来管理的。manifest文件是一个简单文本文件,在该文件中以清单的形式列举了需要被缓存或不需要被缓存的资源文件的文件名称、以及这些资源文件的访问路径。可以为每一个页面单独指定一个mainifest文件,也可以对整个Web应用程序指定一个总的manifest文件。manifest文件示例如下:Txt代码1. CACHEMANIFEST2. #文件的开头必须书CACHEMANIFEST3. #该manifest文件的版本号4. #version75. CACHE:6. other.html7. hello.js8. images/myphoto.jpg9. NETWORK:10. /xxx11. NotOffline.jsp12. *13. FALLBACK:14. online.jslocale.js15. CACHE:16. newhello.html17. newhello.js在manifest文件中,第一行必须是“CACHE MANIFEST”文字,以把本文件的作用告知给浏览器,即对本地缓存中的资源文件进行具体设置。同时,真正运行或测试离线Web应用程序的时候,需要对服务器进行配置,让服务器支持text/cache-manifest这个MIME类型(在HTML5中规定manifest文件的MIME类型为text/cache-manifest) 。在manifest文件中,可以加上注释来进行一些必要的说明或解释,注释行以“#”开始;文件中可以(而且最好)加上版本号,以表示该manifest文件的版本,版本号可以是任何形式的,更新文件时一般也会对该版本号进行更新。指定资源文件,文件路径可以是相对路径,也可以是绝对路径。指定时每个资源文件为一行。在指定资源文件的时候,可以把资源文件分为三类,分别是“CACHE”、“NETWORK”和“FALLBACK”。 在CACHE类别中指定需要被缓存在本地的资源文件。为某个页面指定需要本地缓存的资源文件时,不需要把这个页面本身指定在CACHE类型中,因为如果一个页面具有manifest文件,浏览器会自动对这个页面进行本地缓存。 NETWORK类别为显式指定不进行本地缓存的资源文件,这些资源文件只有当客户端与服务器端建立连接的时候才能访问。该示例中的“*”为通配符,表示没有在本manifest文件中指定的资源文件都不进行本地缓存。 FALLBACK类别中指定两个资源文件,每一个资源文件为能够在线访问时使用的资源文件,第二个资源文件为不能在线访问时使用的备用资源文件。每个类别都是可选的。但是如果文件开头没有指定类别而直接书写资源文件的时候,浏览器把这些资源文件视为CACHE类别,直到看见文件中第一个被书写出来的类别为止,并且允许在同一个manifest文件中重复书写同一类别。为了让浏览器能够正常阅读该文本文件,需要在Web应用程序页面上的html元素的manifest属性中指定manifest文件的URL地址。指定方法如下:Html代码1. 2. 3. 4. 5. 6. 通过这些步骤,将资源文件保存到本地缓存区的基本操作就完成了。当要对本地缓存区的内容进行修改时,只要修改manifest文件就可以了。文件被修改后,浏览器可以自动检查manifest文件,并自动更新本地缓存区中的内容。浏览器与服务器的交互过程首次访问网站时的交互过程如下:1. 浏览器请求访问网站;2. 服务器返回请求网页,例如:index.html;3. 浏览器解析网页,请求页面上所有资源文件,包括HTML文件、图像文件、CSS文件、JS文件以及manifest文件;4. 服务器返回所有资源文件;5. 浏览器处理manifest文件,请求manifest中所有要求本地缓存的文件,包括index.html页面本身,即使刚才已经请求过这些文件。如果你要求本地缓存所有文件,这将是一个比较大的重复的请求过程;6. 服务器返回所有要求本地缓存的文件;7. 浏览器对本地缓存进行更新,存入包括页面本身在内的所有要求本地缓存的资源文件,并且触发一个事件,通知本地缓存被更新。现在浏览器已经把本地缓存更新完毕,如果再次打开浏览器访问该网站,而且manifest文件没有被修改过,它们的交互过程如下:1. 浏览器再次请求访问网站;2. 浏览器发现这个页面被本地缓存,于是使用本地缓存中index.html页面;3. 浏览器解析index.html页面,使用所有本地缓存中的资源文件;4. 浏览器向服务器请求manifest文件;5. 服务器返回一个304代码,通知浏览器manifest没有发生变化。只要页面上的资源文件被本地缓存过,下次浏览器打开这个页面时,总是先使用本地缓存中的资源,然后请求manifest文件。如果再次打开浏览器时,manifest文件已经被更新过了,那么浏览器与服务器之间的交互过程如下:1. 浏览器再次请求访问网站;2. 浏览器发现这个页面被本地缓存,于是使用本地缓存中的index.html页面;3. 浏览器解析index.html页面,使用所有本地缓存中的资源文件;4. 浏览器向服务器请求manifest文件;5. 服务器返回更新过年manifest文件;6. 浏览器处理manifest文件,发现该文件已被更新,于是请求所有要求进行本地缓存的资源文件,包括index.html页面本身;7. 服务器返回要求进行本地缓存的资源文件;8. 浏览器对本地缓存进行更新,丰入所有新的资源文件。并且触发一个事件,通知本地缓存被更新。需要注意的是,即使资源文件被修改过了,在上面的第三步中已经装入的资源文件是不会发生变化的,例如图片不会突然变成新的图片,脚本文件也不会突然使用新的脚本文件,也就是说,这时更新过后的本地缓存中的内容还不能被使用,只有重新打开这个页面的时候才会使用更新过后的资源文件。另外,如果不想修改manifest文件中对于资源文件的设置,但是对服务器上请求缓存的资源文件进行了修改,那么可以通过修改版本号的方式来让浏览器认为manifest文件已经被更新过了,以便重新下载修改过的资源文件。applicationCache对象applicationCache对象代表本地缓存,可以用它来通知用户本地缓存中已经被更新,也允许用户手工更新本地缓存。在浏览器与服务器的交互过程中,当浏览器对本地缓存进行更新,将入新的资源文件时,会触发applicationCache对象的updateready事件,通知本地缓存已经被更新。可以利用该事件告诉用户本地缓存已经被更新,用户需要手工刷新页面来得到最新版本的应用程序,代表如下所示:Js代码1. applicationCache.addEventListener(updateready,function(event)2. /本地缓存已被更新,通知用户。3. alert(本地缓存已被更新,可以刷新页面来得到本程序的最新版本。);4. ,false);另外可以通过applicationCache对象的swapCache()方法来控制如何进行本地缓存的更新及更新的时机。swapCache()方法该方法用来手工执行本地缓存的更新,它只能在applicationCache对象的updateReady事件被触发时调用,updateReady事件只有在服务器上的manifest文件被更新,并且把manifest文件中所要求的资源文件下载到本地后触发。该事件的含义是“本地缓存准备被更新”。当这个事件被触发后,可以用swapCache()方法来手工进行本地缓存的更新。当本地缓存的容量非常大,本地缓存的更新工作将需要相对较长的时间,而且还会把浏览器锁住。这时最好有个提示,告诉用户正在进行本地缓存的更新,代码如下:Js代码1. applicationCache.addEventListener(updateready,function(event)2. /本地缓存已被更新,通知用户。3. alert(正在更新本地缓存);4. applicationCache.swapCache();5. alert(本地缓存更新完毕,可以刷新页面使用最新版应用程序。);6. ,false);在以上代码中,如果不使用swapCache()方法,本地缓存一样会被更新,但是,更新的时候不一样。如果不调用该方法,本地缓存将在下一次打开本页面时被更新;如果调用该方法,则本地缓存将会被立刻更新。因此,可以使用confirm()方法让用户选择更新折时机,是立刻更新还是下次打开页面时更新,特别是当用户可能正在页面上执行一个较大的操作的时候。另外,尽管使用swapCache()方法立刻更新了本地缓存,但是并不意味着我们页面上的图像和脚本文件也会被立刻更新,它们都是在重新打开本页面时才会生效。较完整的示例如下:HTML页面代码:Html代码1. 2. 3. 4. 5. swapCache()方法示例6. 7. 8. 9. swapCache()方法示例。10. 11. 以上页面所使用的脚本文件代码如下:Js代码1. document.addEventListener(load,function(event)2. setInterval(function()3. /手工检查是否有更新4. applicationCache.update();5. ,5000);6. applicationCache.addEventListener(updateready,function(event)7. if(confirm(本地缓存已被更新,需要刷新页面获取最新版本吗?)8. /(3)手工更新本地缓存9. applicationCache.swapCache();10. /重载页面11. location.reload();12. 13. ,false);14. );该页面使用的manifest文件内容如下:Txt代码1. CACHEMANIFEST2. #version1.203. CACHE:4. script.jsapplicationCache对象的事件首次访问网站: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事件,这表示下载结束,可以通过刷新页面来使用更新后的本地
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浦发银行沈阳市于洪区2025秋招笔试英文行测高频题含答案
- 2025年海城市面向应届毕业生招聘医疗岗位高层次急需紧缺人才考前自测高频考点模拟试题及参考答案详解
- 民生银行重庆市开州区2025秋招笔试专业知识题专练及答案
- 玉环市退役军人事务局招聘编外工作人员笔试高频难、易错点备考题库及参考答案详解
- 2025北京海淀青龙桥社区卫生服务中心面向社会招聘2人笔试备考题库及答案详解(历年真题)
- 中信银行昆明市官渡区2025秋招面试典型题目及参考答案
- 2024-2025学年度自考专业(国贸)常考点试卷及参考答案详解(达标题)
- 2025年中共大庆市萨尔图区委政法委员会公益性岗位招聘(2人)模拟试卷含答案详解(培优b卷)
- 民生银行泉州市丰泽区2025秋招结构化面试经典题及参考答案
- 2025年广播电视编辑记者模拟题库含答案详解【达标题】
- 砂石加工现场管理制度
- it部门考核方案(3篇)
- 山东C类人员安全考核模拟练习题及参考答案解析
- 中通规章管理制度
- 茶山管理协议书
- 代办土地证协议书
- 创意美术课程教学大纲
- 2025年生物性污染对人体健康的危害与生物安全防控措施
- 现代文献检索与利用3-文献检索技术
- GB/T 45542-2025工业锅炉综合能效评价技术规范
- DB11 396-2006 地理标志产品 平谷大桃
评论
0/150
提交评论