最近在研究html5的一些相关内容,其过程真是苦不堪言,由于被一些东西所吸引着所以也就硬着头皮挺了过来,结果还是有一些收获,相信也有很多初学者正在和我当时一样的痛苦中,所以把一些研究收获写了出来与大家一起分享讨论:
<mime-mapping> <extension>manifest</extension> <mime-type>text/cache-manifest</mime-type> </mime-mapping>Apache服务器: Apache 中可在 .htaccess 中添加:
AddType text/cache-manifest manifest
第二步:给html元素添加manifest特性:
<html manifest="path/myApplication.manifest">
第三步:编写manifest文件myApplication.manifest:
CACHE MANIFEST #VERSION 10.0 #直接缓存文件 CACHE: applicationCache.jsp js/offline.js js/jquery-1.4.1.min.js #图片文件 images/1.jpg images/2.jpg #需要在线的文件 NETWORK: formapi.jsp #替代方案 FALLBACK: index.jsp
第四步:编写功能代码:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html manifest="myApplication.manifest"> <head> <script type="text/javascript" src="js/jquery-1.4.1.min.js"></script> <script type="text/javascript" src="js/offline.js"></script> <script> </script> <style> </style> </head> <body> <header>Offline Example</header> <section> <img src="images/1.jpg" /> <article> <button id="switchButton">切换</button> <button id="installButton">缓存</button> <h3>Log</h3> *****start 离线应用进程列表 开始start***** <div id="info"> </div> *****end 离线应用进程列表结束 end***** </article> </section> </body> </html>js文件:要写js文件就涉及到了applicatioCache API操作应用缓存的接口。新的window.applicationCache对象可触发一系列缓存状态相关事件,该对象有一个status属性为数值型代表了缓存的状态,该状态共有6种:
缓存状态 | 数值属性 |
UNCACHED(未缓存) | 0 |
IDLE(空闲) | 1 |
CHECKING(检查中) | 2 |
DOWNLOADING(下载中) | 3 |
UPDATEREADY(更新就绪) | 4 |
OBSOLETE(过期) | 5 |
事件 | 关联的缓存状态 |
onchecking | CHECKING |
ondownloading | DOWNLOADING |
onupdateready | UPDATEREADY |
onobsolete | OBSOLETE |
oncached | IDLE |
var n=1; window.applicationCache.onprogress=function(e){ $("#info").append("<br/>Resource loading..."+n); n++; } window.applicationCache.oncached=function(e){ $("#info").append("<br/>oncached"); } window.applicationCache.onchecking=function(e){ $("#info").append("<br/>onchecking"); } window.applicationCache.onnoupdate=function(e){ $("#info").append("<br/>onnoupdate"); } window.applicationCache.onupdateready=function(e){ $("#info").append("<br/>onupdateready"); } window.applicationCache.onobsolete=function(e){ $("#info").append("<br/>onobsolete"); } window.applicationCache.ondownloading=function(e){ $("#info").append("<br/>ondownloading"); } window.applicationCache.onerror=function(e){ $("#info").append("<br/>onerror"); } window.addEventListener("online",function(){ alert("在线"); },true); window.addEventListener("offline",function(){ alert("离线"); },true); $(function(){ showCacheStatus=function(n){ statusMessage=["Uncache","Idle","Checking","Downloading","Update Ready","Obsolete"]; return statusMessage[n]; } $("#installButton").click(function(e){ try{ window.applicationCache.update(); }catch(e){ alert("更新错误!") } }); window.onload=function(e){ if(!window.applicationCache){ alert("当前浏览器不支持离线缓存"); return; } if(!navigator.geolocation){ alert("当前浏览器不支持位置信息"); } if(!window.localStorage){ alert("当前浏览器不支持本地存储Storage"); } cache = window.applicationCache; //返回应用于当前window对象文档的ApplicationCache对象 //ache = self.applicationCache; //返回应用于当前shared worker的ApplicationCache对象 [shared worker] //cache.status //返回当前应用的缓存状态,status有五种无符号短整型值的状态: cache.update(); //调用当前应用资源下载过程 cache.swapCache(); //更新到最新的缓存,这个不会使得之前加载的资源突然被重新加载。图片不会重新加载,样式和脚本也不会重新渲染或解析,唯一的变化是在此之后发出请求页面的资源是最新的 } $("#switchButton").toggle(function(){ $("img:first").attr("src","/test/images/2.jpg"); },function(){ $("img:first").attr("src","/test/images/1.jpg"); }); });//--------ready结束更新时applicationCache提供两个更新方法 update()/swapCache()