今日初探了一下webapp的离线策略。确实好用!建议大家都用上!
(下面会给一个例子,但只是基于safari,chrome和firefox测试。)
开发离线应用的缓存方法大概有4种(如下safari开发工具中的resources所示)
1.cookies(略):传统储存策略。缺点很明显:储存的容量过小,而且很容易被各种软件当垃圾清除,如360等。
2.Application Cachet资源缓存:在html中指定一个manifest文件,给文件中罗列出需要缓存的资源文件列表。浏览器根据资源列表对资源文件缓存。
3.Dom Storage:这一种基于key/value的格式。
DOM Storage 分为两类:sessionStorage 和 localStorage。除了以下区别外,这两类存储对象的功能是完全一致的。
-
sessionStorage 用于存储与当前浏览器窗口关联的数据。窗口关闭后,sessionStorage 中存储的数据将无法使用。
-
localStorage 用于长期存储数据。窗口关闭后,localStorage 中的数据仍然可以被访问。所有浏览器窗口可以共享 localStorage 的数据.
4.web sql Databases:除
了 DOM Storage 以外,HTML5 中还有另外一种数据存储方式 Web SQL
Database。它提供了基本的关系数据库功能,支持页面上的复杂的、交互式的数据存储。它既可以用来存储用户产生的数据,也可以作为从服务器获取数据
的本地高速缓存。例如可以把电子邮件、日程等数据存储到数据库中。Web
SQL Database 支持数据库事务的概念,从而保证了即使多个浏览器窗口操作同一数据,也不会产生冲突。
示例:(这才是重点啊!)
目前我只尝试过Application Cache,所以也只给出这个例子。
开发环境:Apache+php+(windows下的safari,chrome,firefox)/ipod touch下的safari
目的:缓存我指定的index.html和其中的jquery.js资源文件。index.html中的图片不缓存。
文件目录分布如下:
/jqueryapp/
---------------------------------------------
1.index.html
2.jquery.js
3.tetris.php(可能大家觉得这个文件很奇怪,其实是用来发送manifest的mime type的。不然就要修改apache的mime.types或者用.htaccess,很多人没有这个条件,比如我)
4.tetris.manifest
---------------------------------------------
index.html代码
-
<!DOCTYPE html>
-
<html manifest="tetris.php">
-
<head>
-
<meta charset="utf-8">
-
<meta name="viewport" content="width=device-width, initial-scale=1">
-
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0"/>
-
<meta name="apple-mobile-web-app-capable" content="yes" />
-
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
-
<link rel="apple-touch-icon" href="iphon_tetris_icon.png"/>
-
<link rel="apple-touch-startup-image" href="startup.png" />
-
-
<title>appdig</title>
-
-
<script src="jquery.js"></script>
-
-
<span style="white-space:pre"> </span><style type="text/css">
-
<span style="white-space:pre"> </span>body,div,ul,li,p,span,img{
-
<span style="white-space:pre"> </span>margin:0px;
-
<span style="white-space:pre"> </span>padding:0px;
-
<span style="white-space:pre"> </span>}……
<!DOCTYPE html>是用来声明它是一个html5文档。
<html manifest="tetris.php">加上 manifest="tetris.php"来指定资源列表文件。tetris.php就是指定需要缓存的资源文件列表。
tetris.php代码
-
<?php
-
header('Content-Type: text/cache-manifest');
-
readfile('tetris.manifest');
先发送header头部,确定这是一个text/cache-manifest类型文件。再把tetris.manifest中的列表都进来。
tetris.manifes代码
-
CACHE MANIFEST
-
index.html
-
jquery.js
有些文章说包涵manifest的html可以不用写自身。我试了,不写真的也可以。
再说说manifest的书写规则吧。
第一行必须写上CACHE MANIFEST,然后每个资源文件一行,注释用#。
后记:关于manifest的mime type声明
html5提供的这种方法必须保证<html manifest="文本文件">中的文本文件(任意名字和任意扩展名)是t
ext/cache-manifest类型的。即其header必须声明其类型是t
ext/cache-manifest的。
其实如果你有修改apache服务器或者别的web服务器的权限你完全可以不用tetris.php这个文件。在index.html中的直接用 <html manifest="tetris.manifest">就可以。
修改apache的mime.types配置文件,在其中加上下面这句。
text/cache-manifest manifest
或者用.htaccess,加添下面那句(我没尝试)。
AddType text/cache-manifest
用我上面的方法的好处就是不用修改和添加任何配置文件。利用php来发送header来告诉浏览器我是text/cache-manifest类型的。
参考资料:
分享到:
相关推荐
Web基础——WebApp之初体验(三)
前端经典——webApp登录校验及封装
使用HTML5结合Vuejs开发离线记事本webapp项目源码,使用了html5的localstorage本地存储技术,苹果ios可以保存到桌面。
利用html5接口编写的关于webapp调用低功耗蓝牙ble的程序,集合了搜索,连接和数据的写入,各项功能都亲测有效
从晚上下载的例子,发现不能自动获取设备、服务和特征值,这就导致了程序通用性大大降低,在通过自己的摸索后,将这部分功能调试通过,现在已经是一个通用的webapp调用ble的程序了,功能包括搜索、连接蓝牙,选取...
汽车webapp html5源码 静态html页面源代码,包括所有图片,css,页面源码,精品。
Html5与webapp课程讲义:介绍了Html5有趣应用 特效、图书馆应用演示、WAP 和 Web App区别、Web App 缺陷等
创建离线iPhoneWebApp的 一些文档教程
使用html5集合Vuejs开发商品日常卖记录、统计收入结果webapp项目代码,使用了localstorage本地缓存技术,ios苹果端可以保存到桌面使用
基于dclound旗下html5 的webApp调用原生支付插件
quiz-webapp — 使用 AngularJS 的示例混合离线 Web 应用程序混合离线应用程序的各种框架的测试。 :离线支持:原生支持:没有商店的 Android 应用:没有商店的 iPhone 应用程序 :捆绑为本机应用程序入门要开始使用...
webapp开发教程之将html网页打包成app的4种方法.zip
基于Html5的webapp.pdf
WEBAPP HTML5移动开发基础知识和基本理论。
HTML5的离线应用功能可以使得WebApp即使在网络断开的情况下仍能正常使用,这是个非常有用的功能。近来工作中也要用到HTML5离线应用功能,由于是在Android平台上做,所以自然而然的选择Webview来解析网页。但如何使...
html5 webapp上传头像裁剪源码下载
本Share来自刘炬光在w3ctech的“新Web技术-实时Web与多终端”沙龙上的分享。内容中介绍了千万级吞吐WebApp——QQ查找业务的最佳尝试。
WebApp商品商家评价星星功能通用版html5代码
2、HTML5离线应用:利用HTML5的离线应用技术,可使用户在离线情况下继续使用该系统本地功能。在手机连不上互联网的情况下,能继续使用必要的功能,比如班长点名考勤功能,如果班长手机连不上网了,但点名考勤功能...