HTML 5 应用程序缓存的介绍
http://www.w3school.com.cn/html5/html_5_app_cache.asp
接下来通过实际案例介绍HTML5应用程序缓存的介绍。
一 应用服务器
应用服务器使用tomcat.
在tomcat的web.xml 添加如下配置,因为manifest文件返回时MIME-type必须为 text/cache-manifest
1
2
3
4
|
<
mime-mapping
>
<
extension
>appcache</
extension
>
<
mime-type
>text/cache-manifest</
mime-type
>
</
mime-mapping
>
|
二 页面
manifest文件default.appcache
缓存staticPage.html,不缓存 * 即所有文件。如果页面不存在或无法连接到网路,跳转到errorPage.html
1
2
3
4
5
6
7
8
9
10
|
CACHE MANIFEST
staticPage.html
NETWORK:
*
FALLBACK:
/ errorPage.html
|
index.html 引入default.appcache 缓存文件
1
2
3
4
5
6
7
8
9
10
11
12
|
<!DOCTYPE html>
<
html
manifest
=
"default.appcache"
>
<
head
>
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=UTF-8"
>
<
title
>Insert title here</
title
>
</
head
>
<
body
>
this is the index page!
</
body
>
</
html
>
|
staticPage.html
1
2
3
4
5
6
7
8
9
10
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<
html
>
<
head
>
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=UTF-8"
>
<
title
>Insert title here</
title
>
</
head
>
<
body
>
this is the static page! eee
</
body
>
</
html
>
|
randomPage.html
1
2
3
4
5
6
7
8
9
10
11
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<
html
>
<
head
>
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=UTF-8"
>
<
title
>Insert title here</
title
>
</
head
>
<
body
>
This is the random page!
</
body
>
</
html
>
|
errorPage.html
1
2
3
4
5
6
7
8
9
10
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<
html
>
<
head
>
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=UTF-8"
>
<
title
>Insert title here</
title
>
</
head
>
<
body
>
<
h1
>Error !!!</
h1
>
</
body
>
</
html
>
|
所有以上html及缓存文件(default.appcache)都在同一目录下。
现在让我们看看测试结果如何.
访问 http://localhost:8080/webapp/index.html
结果如下
从控制台上的信息,可知staticPage.html,errorPage.html已被缓存.
停止服务器。
访问 http://localhost:8080/webapp/staticPage.html 正常。缓存起效
访问 http://localhost:8080/webapp/randomPage.html 返回errorPage.html内容。yes,FALLBACK配置起效.
访问 http://localhost:8080/webapp/index.html 正常. no, 这不是我们想要的,因为我们并没有设置这个页面要缓存。 从w3cshcool介绍中可知 每个指定了 manifest 的页面在用户对其访问时都会被缓存。
有如下一个方案针对以上问题。
1. 添加cachePage.html
1
2
3
4
5
6
7
8
9
10
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<
html
manifest
=
"default.appcache"
>
<
head
>
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=UTF-8"
>
<
title
>Insert title here</
title
>
</
head
>
<
body
>
</
body
>
</
html
>
|
2. 修改index.html,删除html标签内 manifest="default.appcache",并且在body标签内添加如下。
1
|
<
iframe
src
=
"cachePage.html"
style
=
"display:none;"
></
iframe
>
|
3. 清除浏览器的缓存。(我这里是先重命名服务器端default.appcache文件,刷新任意缓存页面,还原服务器端manifest文件为default.appcache)
经测试,可行,nice!
summary:
如果应用有A,B,C,D 页面。
A 页面中引入了一个manifest文件,该manifest文件,缓存B文件,C文件作为错误页面。
当请求A页面是,浏览器会缓存A,B,C页面,及manifest文件。
如果A、B、C页面有跟新,要刷新文件,就对服务器端的manifest文件做任意修改(或者删除服务器端的manifest文件, 如果这样当用户访问任意缓存页面时,浏览器会尝试同步manifest文件,发现文件不存在,然后删除所有客户端缓存)。
每次访问A,B,C(缓存页面),浏览器都会对manifest文件做一次同步。
访问非缓存的文件,则manifest文件不会同步。
也就是说,每次访问缓存文件,浏览器会去同步manifest文件,
如果manifest文件有跟新,则刷新缓存文件列表(更新缓存文件、删除缓存文件、添加缓存文件)。
然后再次访问缓存文件时就可以看到更新的内容了。
以上都在chrome版本41.0.2272.118做测试。
本文转自 antlove 51CTO博客,原文链接:http://blog.51cto.com/antlove/1675431