一. 实现 HTML5 applicationCache 的步骤
一般的操作步骤
1. 新建 manifest 文件
如文件名为 lzwme.manifest,内容配置参考如下:
03 |
# version 1.2 for update cop help |
07 |
/wp-content/themes/weisayheibai/images/meta_author.png |
08 |
/wp-content/themes/weisayheibai/images/meta_date.png |
09 |
/wp-content/themes/weisayheibai/images/meta_categories.png |
10 |
/wp-content/themes/weisayheibai/images/meta_comments.png |
11 |
/wp-content/themes/weisayheibai/images/meta_views.png |
12 |
/wp-content/themes/weisayheibai/images/new.gif |
13 |
/wp-content/themes/weisayheibai/images/random/tb1.jpg |
14 |
/wp-content/themes/weisayheibai/images/random/tb2.jpg |
15 |
/wp-content/themes/weisayheibai/images/random/tb3.jpg |
16 |
/wp-content/themes/weisayheibai/images/random/tb4.jpg |
17 |
/wp-content/themes/weisayheibai/images/random/tb5.jpg |
18 |
/wp-content/themes/weisayheibai/images/random/tb6.jpg |
19 |
/wp-content/themes/weisayheibai/images/random/tb7.jpg |
20 |
/wp-content/themes/weisayheibai/images/random/tb8.jpg |
21 |
/wp-content/themes/weisayheibai/images/random/tb9.jpg |
22 |
/wp-content/themes/weisayheibai/images/random/tb10.jpg |
23 |
/wp-content/themes/weisayheibai/images/random/tb11.jpg |
24 |
/wp-content/themes/weisayheibai/images/random/tb12.jpg |
25 |
/wp-content/themes/weisayheibai/images/random/tb13.jpg |
26 |
/wp-content/themes/weisayheibai/images/random/tb14.jpg |
27 |
/wp-content/themes/weisayheibai/images/random/tb15.jpg |
28 |
/plugins/jquerylazyload/fill.gif |
29 |
/wp-includes/images/smilies/icon_question.gif |
30 |
/wp-includes/images/smilies/icon_razz.gif |
31 |
/wp-includes/images/smilies/icon_sad.gif |
32 |
/wp-includes/images/smilies/icon_evil.gif |
33 |
/wp-includes/images/smilies/icon_exclaim.gif |
34 |
/wp-includes/images/smilies/icon_smile.gif |
35 |
/wp-includes/images/smilies/icon_redface.gif |
36 |
/wp-includes/images/smilies/icon_biggrin.gif |
37 |
/wp-includes/images/smilies/icon_surprised.gif |
38 |
/wp-includes/images/smilies/icon_eek.gif |
39 |
/wp-includes/images/smilies/icon_confused.gif |
40 |
/wp-includes/images/smilies/icon_cool.gif |
41 |
/wp-includes/images/smilies/icon_lol.gif |
42 |
/wp-includes/images/smilies/icon_mad.gif |
43 |
/wp-includes/images/smilies/icon_twisted.gif |
44 |
/wp-includes/images/smilies/icon_rolleyes.gif |
45 |
/wp-includes/images/smilies/icon_wink.gif |
46 |
/wp-includes/images/smilies/icon_idea.gif |
47 |
/wp-includes/images/smilies/icon_arrow.gif |
48 |
/wp-includes/images/smilies/icon_neutral.gif |
49 |
/wp-includes/images/smilies/icon_cry.gif |
50 |
/wp-includes/images/smilies/icon_mrgreen.gif |
52 |
/wp-content/themes/weisayheibai/style.css |
53 |
/wp-content/plugins/syntax-highlighter-with-add-button-in-editor/styles/shCoreDefault.css |
55 |
/wp-content/themes/weisayheibai/js/jquery.min.js |
56 |
/wp-content/themes/weisayheibai/js/hoveraccordion.js |
57 |
/wp-content/themes/weisayheibai/js/custom.js |
58 |
/wp-content/plugins/syntax-highlighter-with-add-button-in-editor/scripts/shCore.js |
59 |
/wp-content/plugins/syntax-highlighter-with-add-button-in-editor/scripts/shAutoloader.js |
清单可包括以下三个不同部分:CACHE、NETWORK 和 FALLBACK。
CACHE:
这是条目的默认部分。系统会在首次下载此标头下列出的文件(或紧跟在 CACHE MANIFEST 后的文件)后显式缓存这些文件。
NETWORK:
此部分下列出的文件是需要连接到服务器的白名单资源。无论用户是否处于离线状态,对这些资源的所有请求都会绕过缓存。可使用通配符。
FALLBACK:
此部分是可选的,用于指定无法访问资源时的后备网页。其中第一个 URI 代表资源,第二个代表后备网页。两个 URI 必须相关,并且必须与清单文件同源。可使用通配符。
请注意:这些部分可按任意顺序排列,且每个部分均可在同一清单中重复出现。
注意:
A. CACHE MANIFEST 字符串应在第一行,且必不可少
B. 并不支持模糊或正则匹配,添加的文件路径一般应是可以访问的静态文件
C. 如果页面中有静态文件增加,也应该在 CACHE 的列表中添加;
D. 应保持 NETWORK 为 * ,以防止当前页面被缓存了,但未添加至 CACHE 列表的静态文件不从服务器加载,从而出现无法访问到的问题。(测试使用中发现的现象)
2. 在需要缓存的页面中加入该文件导入配置,示例:
04 |
<html manifest="zinhelp.manifest"> |
09 |
//发生了状态变化,则执行更新,一般来说本操作并不需要,因为当 manifest 文件变化时会发生 onnoupdate 事件,浏览器会自动更新缓存文件 |
10 |
if(window.applicationCache && window.applicationCache.status == UPDATEREADY){ |
11 |
window.applicationCache.update(); |
3. 配置服务器的 manifest 格式扩展名文件支持
在 Web 服务器配置中添加如下 MIME 映射:
扩展名为 manifest,类型为 text/cache-manifest
注:
该设置是为了防止在不支持 applicationCache 功能的浏览器上浏览时,浏览器不知道该文件的格式而可能造成作为附件下载。
在支持 HTML5 该功能的浏览器上,一般可以正确的对该文件识别并判断,并不需要服务器强制解析该文件类型。
二. 注意的问题
1. 关于文件的更新
只有当 .manifest 文件变动,缓存文件才会重新更新并缓存。所以动态页面是不宜缓存的。而且当浏览器检测到该文件发生了更新时,会触发一系列事件监听函数,并异步地更新缓存,而当前页显示的依然是历史缓存内容,所以在此刷新时才能浏览最新的内容。
1. 缓存当前页问题
一般我们只需要对不更新或很少更新的文件进行缓存,对于动态更新的页面是不提倡缓存的。
对于加载 manifest 的当前页面,浏览器会默认缓存,这会造成一个问题:
如果当前页为动态更新的页面,那么如果 manifest 文件不更新,则当面页面也就会一直被缓存,那么页面的动态更新就无法获知了。
这在HTML5 相关文档里并没有直接的解决方案,其解释是这是必须而安全的。
如果我们只是想通过当前缓存静态文件,那么我们该如何处理该问题呢?
一个可行的解决方法是添加 iframe ,那么 iframe 会一直缓存(直到 manifest 变化后更新),当前页则一直是动态的。
2. 大小限制问题
浏览器对缓存数据的容量限制可能不太一样(某些浏览器设置的限制是每个站点 5MB)
这一点并没有在多浏览器上作严格测试,对于 HTML5 的 本地存储 localStorage 大小限制的测试可参考这里:
HTML5 本地存储 localStorage:
http://lzw.me/Category/tech/html5-localstorage.html
不过,如果你编写的是针对 Chrome 网上应用店的应用,可使用 unlimitedStorage 取消该限制。
三. 相关状态监控函数参考
当浏览器检测到 .manifest 文件发生变动时,浏览器会异步的对缓存文件更新,而当前显示的依然是历史缓存内容,那么需要再次刷新才能浏览到最新的页面。但是浏览器会触发事件监听函数,我们可以通过这些事件监听函数进行适当的应用处理。
当前 HTML5 的 applicationCache 支持的监听函数有如下几种,适当的定义这些函数即可对离线应用的更新流程及应用的处理进行控制。
02 |
function deAppCacheHandler(){ |
03 |
if(! applicationCache ) return; |
06 |
function msgTips(msg){ |
07 |
$('.longMsg .label-info').html(msg); |
11 |
applicationCache.onchecking = function(){ |
13 |
msgTips('正在检测离线缓存配置...'); |
17 |
applicationCache.ondownloading = function(){ |
18 |
//检查到有manifest或者manifest文件 |
20 |
//即使需要缓存的文件在请求时服务器已经返回过了 |
21 |
msgTips('本地缓存正在更新中...'); |
22 |
window.precesscount = 0; //用于进度计算 |
26 |
applicationCache.onnoupdate = function(){ |
27 |
//返回304表示没有更新,通知浏览器直接使用本地文件 |
29 |
setTimeout(function(){ |
35 |
applicationCache.onprogress = function(e){ |
39 |
if(e & e.lengthComputable){ |
40 |
precess = ' ' + Math.round(100 * e.loaded / e.total) + '%' |
42 |
window.precesscount += 1; |
43 |
precess = '(' + window.precesscount + ')'; |
45 |
msgTips('本地缓存正在更新中... ' + precess); |
49 |
applicationCache.oncached = function(){ |
51 |
msgTips('全部离线内容缓存成功!'); |
55 |
applicationCache.onupdateready = function(){ |
59 |
/*/alert("本地缓存正在更新中。。。"); |
60 |
if(confirm("是否重新载入已更新的文件?")){ |
61 |
applicationCache.swapCache();//弃用旧的缓存文件 |
64 |
msgTips('已有新版本,请刷新页面载入'); |
65 |
applicationCache.swapCache();//弃用旧的缓存文件 |
69 |
applicationCache.onobsolete = function(){ |
70 |
//未找到文件,返回404或者401时候触发 |
75 |
applicationCache.onerror = function(){ |
77 |
msgTips('无法访问离线配置文件'); |
81 |
window.onoffline = function(){ |
- HTML 5 应用程序缓存(Application Cache)cache manifest 文件使用 html5 中创建manifest缓存以及更新方法 一个manifest文件会创建一份缓存,不同的manifest文件其缓存的内容是互不干扰的
HTML5 离线缓存-manifest简介 HTML 5 应用程序缓存 使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本. 什么是应用程序缓存(A ...
- HTML5学习(九)----应用程序缓存
参考教程:http://www.w3school.com.cn/html5/html_5_app_cache.asp 使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 w ...
- HTML5 学习笔记 应用程序缓存
使用html5 通过创建cache manifest文件,可以轻松地创建web应用的离线版本. html5引入了应用程序缓存,这意味着web应用可进行缓存,并可在没有因特网连接时进行访问. 应用程序缓 ...
- Atitit.h5 web webview性能提升解决方案-----fileStrore缓存离线存储+http方案
Atitit.h5 web webview性能提升解决方案-----fileStrore缓存离线存储+http方案 1. 业务场景 android+webview h5 css背景图性能提升1 2. ...
- H5 应用程序缓存(离线缓存)
离线缓存这个功能的实现有以下步骤: 1,以nginx做web服务器为例,在mime.types文件中添加一行:text/cache-manifest manifest,作用是为了让服务器识别该 ...
- AppCache 离线存储 应用程序缓存 API 及注意事项
使用ApplicationCache接口实现离线缓存 原文:http://www.mb5u.com/HTML5/html5_96464.html 推荐:html5 application cache遇 ...
- html5的离线存储问题集合
HTML5的离线存储使用一个manifest文件来标明哪些文件是需要被存储的,使用如 来引入一个manifest文件,这个文件的路径可以是相对的,也可以是绝对的,如果你的web应用很多,而且希望能集中 ...
- 转 html5离线储存,application cache,manifest使用体验
html5离线应用application cache 最近在APP里新增一个论坛模块,为了快速地完成,决定将整个论坛模块做成WEB APP,WEB APP最致命的就是用户体验问题,页面跳转和过多的请求 ...
- 神奇的HTML5离线存储(应用程序缓存)
声明:本文为原创文章,如需转载,请注明来源并保留原文链接前端小尚,谢谢! 前言 使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本. HTML5引入 ...
随机推荐
- Linux命令中特殊符号
转自:http://blog.chinaunix.net/uid-16946891-id-5088144.html 在shell中常用的特殊符号罗列如下:# ; ;; . , / \ 'strin ...
- 攻城狮在路上(叁)Linux(二十五)--- linux内存交换空间(swap)的构建
swap的功能是应付物理内存不足的状况,用硬盘来暂时放置内存中的信息. 对于一般主机,物理内存都差不多够用,所以也就不会用到swap,但是对于服务器而言,当遇到大量网络请求时或许就会用到. 当swap ...
- fis3-postpackager-loader插件说明
fis3-postpackager-loader 静态资源前端加载器,用来分析页面中使用的和依赖的资源(js或css), 并将这些资源做一定的优化后插入页面中.如把零散的文件合并. 注意 此插件做前端 ...
- PMP 第一章 引论
1 项目的特点 独特性 临时性 但创造的成果一般和其特点相反. 2 什么是项目管理? 什么是项目? 项目管理就是将知识 技能 工具与技术应用于项目活动,以满足项目的要求,达到项目的目的. 项目管理通过 ...
- bbed的使用--安装及初探
bbed是oracle内部一款用来直接查看和修改数据文件数据的工具,可以直接修改Oracle数据文件块的内容,在一些特殊恢复场景下比较有用. 1.bbed 的安装 在9i/10g中连接生成bbed: ...
- [Unity3D]上海某大型游戏公司的基础面试题
一个小老乡跟我聊到去上海某大公司的基础面试题,面试结果不尽如人意,但还是分享了下面试的试题,刚刚第一次录制视频,给某人讲课,我感觉讲的还算比较耐心,但发现一些新手入门学习的弊端,可能是很普遍的现象,这 ...
- C# 指针操作图像 二值化处理
/// <summary> /// 二值化图像 /// </summary> /// <param name="bmp"></param& ...
- 日常UVA题目英语积累
quote应该是引号的意思 Two matches (i, j) and (p, q) are called independent when i = p if and only if j = q. ...
- Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab
今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...
- JAVA Day3
分支与循环 char sex = in.next().charAt(0); java中 ...