HTML5 离线缓存 applicationCache 通过iframe直接缓存远程服务器文件。

    通过几天的研究HMTL5的离线缓存,网上资料查了很多,翻书也看了,折腾来折腾去终于搞定。下面是我的理解,希望对新手有帮忙。

 

一、什么是Cache Manifest

话说,作为一个 web 开发相关的人员,都不会少听到、看到 cache 这个词。是的,上面也已经说了,它是一种缓存的机制。它可以通过一个 .manifest 文件来配置需要缓存的或者一定要保持联网缓存的文件。而重点就是这个 .manifest 文件,具体的可以 Google 一下,而简单的我帮你整理一下现在可能会希望了解的东西:

 

MIME TYPE:text/cache-manifest

需要由你创建的:NAME.manifest

作用:主要是配置需要缓存的文件

 

二、创建test.manifest 文件

CACHE MANIFEST

#version 5.0

# 直接缓存的文件

 CACHE:

#绝对路径 和 相对路径都可以

js/initial.js

js/keyevent.js

js/uianimate.js

js/jquery.min.js

loading.gif

bg.jpg

jquery-mini-1.8.2.js

# 需要在时间在线的文件*号代表除了上面缓存文件都是在线访问

NETWORK:

*

# 替代方案

FALLBACK

online.html off.html

三、给 index.hmtl <html> 标签加 manifest 属性:

<html manifest=" test.manifest ">

index.hmtl 页面可以写一些事件

 

//手动更新 window.applicationCache.update();

applicationCache.onchecking = function(){

   //检查manifest文件是否存在

 

}

applicationCache.ondownloading = function(){

  //检查到有manifest或者manifest文件

  //已更新就执行下载操作

  //即使需要缓存的文件在请求时服务器已经返回过了

}

 

applicationCache.onnoupdate = function(e){

  //返回304表示没有更新,通知浏览器直接使用本地文件   

}

 

applicationCache.onprogress = function(){

  //下载的时候周期性的触发,可以通过它

  //获取已经下载的文件个数

}

 

applicationCache.oncached = function(){

  //下载结束后触发,表示缓存成功

}

 

applicationCache.onupdateready = function(){

  //第二次载入,如果manifest被更新

  //在下载结束时候触发

  //不触发onchched

  alert("本地缓存正在更新中。。。");

  if(confirm("是否重新载入已更新文件")){

  applicationCache.swapCache();// 得到最新版本缓存列表,并且成功下载资源,更新缓存到最新  

  location.reload();

  }

}

//清单 5 手动更新缓存

//if (window.applicationCache.status == window.applicationCache.UPDATEREADY) { window.applicationCache.update(); }

 

applicationCache.onobsolete = function(){

  //未找到文件,返回404或者401时候触发

}

 

applicationCache.onerror = function(){

  //其他和离线存储有关的错误

}

四、出现的问题

按照上面的方法可以缓存,但是这个情况是test.manifest文件和需要缓存的文件在同一项目下面。

现在出现的问题是我访问本地文件就缓存index.html 相关的文件。

本地文件loading.html 并且本地没有 test.manifest

当时我就想在loading.html 页面设置如下:

<html manifest=" http://....../ test.manifest  "> 这样缓存不了

五、怎么解决本地文件去动态缓存服务器文件

在loading.html 页面加上iframe 标签 SRC 指向的是服务器文件 Cache.html

<html id="html" manifest='test.manifest'>
<head>
    <title>loading</title>
     
</head>
<body>
     
</body>
<script type="text/javascript">
	var url=location.href.split("mac=");
	url=url[1].split("&");
	var mac=url[0];
	var user=url[1].split("user=")[0];
	applicationCache.onupdateready = function(){
	   //第二次载入,如果manifest被更新 http://172.249.0.89:8081/ftp/sangsang/
	   //在下载结束时候触发
	   //不触发onchched
	   alert("本地缓存正在更新中。。。");
	   if(confirm("是否重新载入已更新文件")){
		   applicationCache.swapCache();// 得到最新版本缓存列表,并且成功下载资源,更新缓存到最新  
		   location.reload();
	   }
	   localStorage.setItem("mac", mac);
	   localStorage.setItem("user"  , user);
	  
	} 
</script>
</html>

 这样就可以缓存动态页面了,写着写着 就觉得说不清楚了,如果有什么不知道的可以加我QQ 463968565 答案:是

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值