- 浏览: 266556 次
- 性别:
- 来自: 沈阳
文章分类
最新评论
-
qq705570553:
嗯,是可以用,注意要保持两个文件夹的一致性
快速复制java对应的class文件,方便制作svn的patch。 -
qq705570553:
path1里面的java文件根本就没替换成class
快速复制java对应的class文件,方便制作svn的patch。 -
qq705570553:
用不了,是不是你写的有问题?
快速复制java对应的class文件,方便制作svn的patch。 -
csxk:
不知道修改后的源码怎么编译回去 ,在网上苦苦查询,终于找到了这 ...
Eclipse中自动生成get/set时携带注释给get/set -
dxqrr:
利用web.xml来切换
spring3.1 profile 配置不同的环境
HTML5 是目前正在讨论的新一代 HTML 标准,它代表了现在 Web 领域的最新发展方向。在 HTML5 标准中,加入了新的多样的内容描述标签,直接支持表单验证、视频音频标签、网页元素的拖拽、离线存储和工作线程等功能。其中一个新特性就是对离线应用开发的支持。 在开发支持离线的 Web 应用程序时,开发者通常需要使用以下三个方面的功能: 尽管 HTML5 还处于草稿状态,但是各大主流浏览器都已经实现了其中的很多功能。Chrome、Firefox、Safari 和 Opera 的最新版本都对 HTML5 离线功能提供了完整的支持。IE8 也支持了其中的在线状态检测和 DOM Storage 功能。下面将具体介绍 HTML5 离线功能中的离线资源缓存、在线状态检测、DOM Storage 和 Web SQL Database,最后通过一个简单的 Web 程序说明使用 HTML5 开发离线应用的方法。 为了能够让用户在离线状态下继续访问 Web 应用,开发者需要提供一个 cache manifest 文件。这个文件中列出了所有需要在离线状态下使用的资源,浏览器会把这些资源缓存到本地。本节先通过一个例子展示 cache manifest 文件的用途,然后详细描述其书写方法,最后说明缓存的更新方式。 我们通过 W3C 提供的示例来说明。Clock Web 应用由三个文件“clock.html”、“clock.css”和“clock.js”组成。 当用户在离线状态下访问“clock.html”时,页面将无法展现。为了支持离线访问,开发者必须添加 cache manifest 文件,指明需要缓存的资源。这个例子中的 cache manifest 文件为“clock.manifest”,它声明了 3 个需要缓存的资源文件“clock.html”、“clock.css”和“clock.js”。 添加了 cache manifest 文件后,还需要修改“clock.html”,把 <html> 标签的 manifest 属性设置为“clock.manifest”。修改后的“clock.html”代码如下。 修改后,当用户在线访问“clock.html”时,浏览器会缓存“clock.html”、“clock.css”和“clock.js”文件;而当用户离线访问时,这个 Web 应用也可以正常使用了。 下面说明书写 cache manifest 文件需要遵循的格式。 清单 4 的代码中给出了 cache manifest 中各类标识符的使用示例。 # 下面是另一些需要缓存的资源,在这个示例中只有一个 css 文件。 应用程序可以等待浏览器自动更新缓存,也可以使用 Javascript 接口手动触发更新。 浏览器除了在第一次访问 Web 应用时缓存资源外,只会在 cache manifest 文件本身发生变化时更新缓存。而 cache manifest 中的资源文件发生变化并不会触发更新。 开发者也可以使用 window.applicationCache 的接口更新缓存。方法是检测 window.applicationCache.status 的值,如果是 UPDATEREADY,那么可以调用 window.applicationCache.update() 更新缓存。示范代码如下。 如果 Web 应用程序仅仅是一些静态页面的组合,那么通过 cache manifest 缓存资源文件以后,就可以支持离线访问了。但是随着互联网的发展,特别是 Web2.0 概念流行以来,用户的提交的数据渐渐成为互联网的主流。那么在开发支持离线的 Web 应用时,就不能仅仅满足于静态页面的展现,还必需考虑如何让用户在离线状态下也可以操作数据。离线状态时,把数据存储在本地;在线以后,再把数据同步到服务器上。为了做到这一点,开发者首先必须知道浏览器是否在线。HTML5 提供了两种检测是否在线的方式:navigator.online 和 online/offline 事件。 navigator.onLine 属性表示当前是否在线。如果为 true, 表示在线;如果为 false, 表示离线。当网络状态发生变化时,navigator.onLine 的值也随之变化。开发者可以通过读取它的值获取网络状态。 当开发离线应用时,通过 navigator.onLine 获取网络状态通常是不够的。开发者还需要在网络状态发生变化时立刻得到通知,因此 HTML5 还提供了 online/offline 事件。当在线 / 离线状态切换时,online/offline 事件将触发在 body 元素上,并且沿着 document.body、document 和 window 的顺序冒泡。因此,开发者可以通过监听它们的 online/offline 事件来获悉网络状态。 在开发支持离线功能的 Web 应用时,开发者需要在本地存储数据。当前浏览器支持的 cookie 虽然也可以用来存储数据,但是 cookie 长度非常小(通常几 k),而且功能有限。因此,HTML5 中新引入了 DOM Storage 机制,用于存储 key/value 对,它的设计目标是提供大规模、安全且易用的存储功能。 DOM Storage 分为两类:sessionStorage 和 localStorage。除了以下区别外,这两类存储对象的功能是完全一致的。 每一个 Storage 对象都可以存储一系列 key/value 对,Storage 接口定义为: 其中最常用的接口是 getItem 和 setItem。getItem 用于获取指定 key 的 value,而 setItem 用于设置指定 key 的 value。 这里给出一个使用了 sessionStorage 的例子,localStorage 的用法与它相同。首先使用 SetItem 添加了一个名为“userName”的项,它的值是“developerworks”。然后,调用 getItem 得到“userName”的值,并且弹出提示框显示它。最后,调用 removeItem 删除“userName”。 除了 DOM Storage 以外,HTML5 中还有另外一种数据存储方式 Web SQL Database。它提供了基本的关系数据库功能,支持页面上的复杂的、交互式的数据存储。它既可以用来存储用户产生的数据,也可以作为从服务器获取数据的本地高速缓存。例如可以把电子邮件、日程等数据存储到数据库中。Web SQL Database 支持数据库事务的概念,从而保证了即使多个浏览器窗口操作同一数据,也不会产生冲突。 使用数据库的第一步是创建并打开数据库,API 是 openDatabase。当数据库已经存在时,openDatabase 仅仅打开数据库;如果这个数据库不存在,那么就创建一个空数据库并且打开它。openDatabase 的定义是: name:数据库名。 version:数据库版本。 displayName:显示名称。 estimatedSize:数据库预估长度(以字节为单位)。 creationCallback:回调函数。 在打开数据库以后,就可以使用事务 API transaction。每一个事务作为操作数据库的原子操作,不会被打断,从而避免了数据冲突。transaction 的定义是: callback:事务回调函数,其中可以执行 SQL 语句。 errorCallback:出错回调函数。 successCallback:执行成功回调函数。 在事务的回调函数 callback 中,可以执行 SQL 语句,API 是 executeSQL。executeSQL 的定义是: sqlStatement:SQL 语句。 arguments:SQL 语句需要的参数。 callback:回调函数。 errorCallback:出错回调函数。 下面通过一个例子说明 Web SQL Database 的基本用法。它首先调用 openDatabase 创建了名为“fooDB”的数据库。然后使用 transaction 执行两条 SQL 语句。第一条 SQL 语句创建了名为“foo”的表,第二条 SQL 语句向表中插入一条记录。 最后,通过一个例子来说明使用 HTML5 开发离线应用的基本方法。这个例子会用到前面提到的离线资源缓存、在线状态检测和 DOM Storage 等功能。假设我们开发一个便签管理的 Web 应用程序,用户可以在其中添加和删除便签。它支持离线功能,允许用户在离线状态下添加、删除便签,并且当在线以后能够同步到服务器上。 这个程序的界面很简单,如图 1 所示。用户点击“New Note”按钮可以在弹出框中创建新的便签,双击某便签就表示删除它。 这个页面的源文件是 index.html,它的代码如清单 8 所示。 在 body 中声明了一个按钮和一个无序列表。当按下“New Note”按钮时,newNote 函数将被调用,它用来添加一条新的便签。而无序列表初始为空,它是用来显示便签的列表。 定义 cache manifest 文件,声明需要缓存的资源。在这个例子中,需要缓存“index.html”、“server.js”、“data.js”和“UI.js”等 4 个文件。除了前面列出的“index.html”外,“server.js”、“data.js”和“UI.js”分别包含服务器相关、数据存储和用户界面代码。cache manifest 文件定义如下。 用户界面代码定义在 UI.js 中。 UI.js 中的代码包含添加便签和删除便签的界面操作。 数据存储代码定义在 data.js 中。 window.addEventListener("online", SyncWithServer,false); data.js 中的代码包含添加便签、删除便签和与服务器同步等数据操作。其中用到了 navigator.onLine 属性、online 事件、DOM Storage 等 HTML5 新功能。 在 data.js 的最后一行,注册了 window 的 online 事件处理函数 SyncWithServer。当 online 事件发生时,SyncWithServer 将被调用。其功能如下。 服务器相关代码定义在 server.js 中。 由于这部分代码与服务器有关,这里只说明各个函数的功能,具体实现可以根据不同服务器编写代码。 本文介绍了 HTML5 为了支持离线应用程序新增的强大功能。通过阅读本文,读者能够了解到 HTML5 中离线相关特性的基本用法,从而掌握利用 HTML5 开发 Web 离线应用的方法。 郭宗宝现在 IBM 中国软件开发实验室 Lotus 开发中心工作,目前从事 Lotus Quickr 的客户支持工作。对 Web 服务,Web 2.0 相关技术有浓厚的兴趣。 您可以在 My developerWorks 社区中找到他:http://www.ibm.com/developerworks/mydeveloperworks/profiles/user/nkhit。
清单 1. Clock 应用代码
<!-- clock.html -->
<!DOCTYPE HTML>
<html>
<head>
<title>Clock</title>
<script src="clock.js"></script>
<link rel="stylesheet" href="clock.css">
</head>
<body>
<p>The time is: <output id="clock"></output></p>
</body>
</html>
/* clock.css */
output { font: 2em sans-serif; }
/* clock.js */
setTimeout(function () {
document.getElementById('clock').value = new Date();
}, 1000);
清单 2. clock.manifest 代码
CACHE MANIFEST
clock.html
clock.css
clock.js
清单 3. 设置 manifest 后的 clock.html 代码
<!-- clock.html -->
<!DOCTYPE HTML>
<html manifest="clock.manifest">
<head>
<title>Clock</title>
<script src="clock.js"></script>
<link rel="stylesheet" href="clock.css">
</head>
<body>
<p>The time is: <output id="clock"></output></p>
</body>
</html>
清单 4. cache manifest 示例代码
CACHE MANIFEST
# 上一行是必须书写的。
images/sound-icon.png
images/background.png
NETWORK:
comm.cgi
CACHE:
style/default.css
FALLBACK:
/files/projects /projects
清单 5 手动更新缓存
if (window.applicationCache.status == window.applicationCache.UPDATEREADY)
{
window.applicationCache.update();
}
interface Storage {
readonly attribute unsigned long length;
getter DOMString key(in unsigned long index);
getter any getItem(in DOMString key);
setter creator void setItem(in DOMString key, in any data);
deleter void removeItem(in DOMString key);
void clear();
};
清单 6 DOM Storage 示例代码
<!DOCTYPE HTML>
<html>
<body>
<script>
// 在 sessionStorage 中定义'userName'变量
sessionStorage.setItem('userName', 'developerworks');
// 访问'userName'变量
alert("Your user is: " + sessionStorage.getItem('userName'));
// 最后删除'userName'
sessionStorage.removeItem('userName');
</script>
</body>
</html>
Database openDatabase(in DOMString name, in DOMString version,
in DOMString displayName, in unsigned long estimatedSize,
in optional DatabaseCallback creationCallback);
void transaction(in SQLTransactionCallback callback,
in optional SQLTransactionErrorCallback errorCallback,
in optional SQLVoidCallback successCallback);
void executeSql(in DOMString sqlStatement,
in optional ObjectArray arguments, in optional SQLStatementCallback callback,
in optional SQLStatementErrorCallback errorCallback);
清单 7 Web SQL Database 示例代码
var db = openDatabase('fooDB', '1.0', 'fooDB', 2 * 1024);
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS foo (id unique, text)');
tx.executeSql('INSERT INTO foo (id, text) VALUES (1, "foobar")');
});
图 1. 应用程序页面
清单 8 页面 HTML 代码
<html manifest="notes.manifest">
<head>
<script type="text/javascript" src="server.js"></script>
<script type="text/javascript" src="data.js"></script>
<script type="text/javascript" src="UI.js"></script>
<title>Note List</title>
</head>
<body onload = "SyncWithServer()">
<input type="button" value="New Note" onclick="newNote()">
<ul id="list"></ul>
</body>
</html>
清单 9 cache manifest 文件
CACHE MANIFEST
index.html
server.js
data.js
UI.js
清单 10 用户界面代码 UI.js
function newNote()
{
var title = window.prompt("New Note:");
if (title)
{
add(title);
}
}
function add(title)
{
// 在界面中添加
addUIItem(title);
// 在数据中添加
addDataItem(title);
}
function remove(title)
{
// 从界面中删除
removeUIItem(title);
// 从数据中删除
removeDataItem(title);
}
function addUIItem(title)
{
var item = document.createElement("li");
item.setAttribute("ondblclick", "remove('"+title+"')");
item.innerHTML=title;
var list = document.getElementById("list");
list.appendChild(item);
}
function removeUIItem(title)
{
var list = document.getElementById("list");
for (var i = 0; i < list.children.length; i++) {
if(list.children[i].innerHTML == title)
{
list.removeChild(list.children[i]);
}
}
}
清单 11 数据存储代码 data.js
var storage = window['localStorage'];
function addDataItem(title)
{
if (navigator.onLine) // 在线状态
{
addServerItem(title);
}
else // 离线状态
{
var str = storage.getItem("toAdd");
if(str == null)
{
str = title;
}
else
{
str = str + "," + title;
}
storage.setItem("toAdd", str);
}
}
function removeDataItem(title)
{
if (navigator.onLine) // 在线状态
{
removeServerItem(title);
}
else // 离线状态
{
var str = storage.getItem("toRemove");
if(str == null)
{
str = title;
}
else
{
str = str + "," + title;
}
storage.setItem("toRemove", str);
}
}
function SyncWithServer()
{
// 如果当前是离线状态,不需要做任何处理
if (navigator.onLine == false)return;
var i = 0;
// 和服务器同步添加操作
var str = storage.getItem("toAdd");
if(str != null)
{
var addItems = str.split(",");
for(i = 0; i<addItems.length; i++)
{
addDataItem(addItems[i]);
}
storage.removeItem("toAdd");
}
// 和服务器同步删除操作
str = storage.getItem("toRemove");
if(str != null)
{
var removeItems = str.split(",");
for(i = 0; i<removeItems.length; i++)
{
removeDataItem(removeItems[i]);
}
storage.removeItem("toRemove");
}
// 删除界面中的所有便签
var list = document.getElementById("list");
while(list.lastChild != list.firstElementChild)
list.removeChild(list.lastChild);
if(list.firstElementChild)
list.removeChild(list.firstElementChild);
// 从服务器获取全部便签,并显示在界面中
var allItems = getServerItems();
if(allItems != "")
{
var items = allItems.split(",");
for(i = 0; i<items.length; i++)
{
addUIItem(items[i]);
}
}
}
清单 12 服务器相关代码 server.js
function addServerItem(title)
{
// 在服务器中添加一项
}
function removeServerItem(title)
{
// 在服务器中删除一项
}
function getServerItems()
{
// 返回服务器中存储的便签列表
}
发表评论
-
CSS3实现漂亮的按钮动画
2012-07-16 16:51 1563Chrome下效果理想,Firefox,IE9下没有动画效果。 ... -
页面淡入效果
2012-07-13 16:16 1057先定义一个淡入的动画效果。 @-webkit-keyf ... -
HTML5 缓存: CACHE MANIFEST
2012-07-13 16:13 1183自从翻译了《解读 HTML5:建议、技巧和技术》,就一 ... -
使用本地数据库实现Web留言本
2011-07-19 14:47 1102这个是《Html5与css3权威指南》中的一个例子,写出 ... -
HTML5 新增元素整理
2011-07-07 16:14 949整理了一下html5中新增 ...
相关推荐
- **互联网服务**:例如Web邮箱、RSS阅读器以及地图应用等,都能受益于离线功能。比如,在飞行模式下或高铁上仍能查看电子邮件;在网络不佳的地方也可以继续阅读新闻或者使用地图导航。 ##### 兼容性: - **桌面端...
HTML5离线数据库的引入极大地提升了Web应用的离线体验,开发者可以利用这一特性来提升应用的性能和可用性,同时需要关注其潜在的安全性和兼容性问题。通过结合服务器端的同步机制,可以构建出更加健壮和用户友好的...
HTML5离线存储技术通过离线资源缓存、在线状态检测和本地数据存储等方式,为Web应用提供了强大的离线功能。这不仅提高了用户体验,也为开发人员提供了更多的可能性。随着HTML5标准的不断发展和完善,未来还将有更多...
离线存储的应用场景广泛,如Gmail、Zoho、Remember The Milk和WordPress等都在使用或过渡到HTML5离线功能。然而,不同浏览器对离线存储的支持程度不同,需要考虑到兼容性问题。例如,IE较早版本不支持,而Firefox、...
这一功能通过HTML5的离线存储标准实现,包括Application Cache(应用程序缓存)和Service Worker(服务工作者)。在本案例中,提供的压缩包文件包含了一系列用于展示HTML5离线应用的元素和实践。 1. **notes.html**...
HTML5离线存储是Web应用程序实现离线工作的关键技术,它允许网页在用户...同时,理解Service Worker的工作原理和使用方法也是现代Web开发的重要技能,因为它不仅可以实现离线缓存,还能进行性能优化和推送通知等功能。
HTML5离线缓存,也称为App Cache,是HTML5引入的一种增强网页应用程序离线运行能力的技术。它允许开发者将一部分网页资源(如HTML、CSS、JavaScript、图片等)存储在本地,使得用户在离线状态下依然能访问这些页面,...
这一功能主要依赖于HTML5的离线存储标准,包括App Cache(应用程序缓存)和Service Worker(服务工作者)等技术。下面我们将深入探讨这些知识点。 1. **App Cache(应用程序缓存)** - **基本概念**:App Cache是...
这一功能主要依赖于HTML5的离线缓存机制,通过一个称为`cache manifest`的文件来指定需要缓存的资源。当用户首次访问带有manifest属性的HTML页面时,浏览器会下载manifest文件中列出的所有资源并将其存储在本地。...
HTML5离线存储是现代网页应用中的一个重要特性,它使得应用程序在无网络连接或网络状况不佳时仍能正常运行。这个技术主要分为两种形式:Application Cache(应用缓存)和IndexedDB。 首先,我们来看看Application ...
在这个"HTML-离线中文手册"中,包含了一些关于HTML的重要资源,特别是与HTML5相关的知识。 首先,W3CSchool是一个全球知名的在线学习平台,提供各种Web技术的教程,包括HTML。在W3CSchool的HTML部分,你可以找到从...
HTML5离线应用(也称为离线存储或离线Web应用)是利用HTML5的离线存储功能,使得Web应用可以在没有网络连接时仍然能够运行。关键技术包括App Cache、Service Worker和IndexedDB等。 1. App Cache:是早期的离线存储...
【X5内核详解】 X5内核是腾讯公司推出的一款高性能、跨平台的Web浏览内核,主要用于提升移动设备上的网页浏览体验。...而“离线x5Demo.zip”则为开发者提供了一个学习和实践X5内核离线功能的平台。
X5内核支持HTML5的AppCache和Service Worker等离线存储技术,这些技术允许开发者将必要的网页资源(如HTML、CSS、JavaScript文件)缓存在用户的设备上,即使在网络断开时也能正常访问。AppCache定义了一个离线应用的...
HTML5和CSS3是现代网页开发的两大核心技术,它们极大地丰富了网页的表现力和功能,为开发者提供了更多创造独特用户体验的工具。这个离线包包含了关于这两者的重要参考资料,包括"css3.0参考手册(离线版).chm"和"w3c...
HTML5是现代网页开发的核心标准,它极大地扩展了HTML4的功能,增强了网页的交互性和表现力。本离线学习资料包含了一系列关于HTML5的重要知识点,旨在帮助开发者在没有网络连接的情况下也能持续学习和进步。 首先,...
HTML5 离线存储技术是现代Web开发中的一个重要特性,它使得网页和应用程序即使在网络不稳定或者无网络连接的情况下也能正常运行。这项技术的核心在于利用HTML5的`Application Cache`(应用缓存)或者称为`Cache ...
总的来说,HTML5离线数据库和相关技术极大地提升了Web应用的用户体验,使开发者能够构建更加健壮和功能丰富的应用程序。理解并掌握这些技术对于任何希望在HTML5领域发展的IT专业人士来说都是非常重要的。
ECharts 是一个由百度开发的开源JavaScript数据可视化库...离线文档中的示例代码和实际案例将帮助你快速上手并深入理解ECharts 5+的各种功能。通过阅读和实践,你将能够熟练地运用ECharts 5+进行复杂的数据可视化项目。