前面已经总结了主要的API扩展,下面几个扩展只有在专用的场合才会发挥最大的作用,这里简单了解一下。下面这些特性无一例外,IE均不支持。应用缓存和服务端消息在其他的主流浏览器中都是支持的。桌面通知目前只有Chrome支持。
应用缓存 很多时候,我们需要缓存一些不经常改变的页面来提高访问速度;而且对于某些应用,我们也希望在离线的情况下也可以使用。在HTML5中,你可以通过一个称之为“应用缓存”的技术很方便的实现这些功能。
在应用缓存的实现中,HTML5允许我们创建一个缓存manifest文件来方便的生成一个离线版的应用。
实现步骤:
1. 启用页面的缓存,很简单,只需要在document的html中包含manifest属性:
...
每一个包含这个manifest属性的页面当用户访问的时候都会被缓存。如果manifest属性没有指定的话,将不会缓存(除非网页被直接在manifest文件中指定)。manifest文件扩展名还没有统一的标准,推荐的扩展名是".appcache"。
2. 服务器端配置manifest文件的MIME类型
一个manifest文件需要被正确的MIME-type支持,这种文件类型为"text/cache-manifest"。必须在所使用的web服务器上进行配置。例如:Apache 中可在 .htaccess 中添加: AddType text/cache-manifest manifest。
3.编写manifest文件
manifest文件是一个简单的文本文件,告诉了浏览器去缓存什么内容(或者不缓存什么内容)。
manifest文件包含下面三个部分:
• CACHE MANIFEST - 在这个列表标题下的文件将会在下载后被缓存。
• NETWORK - 在这个列表标题下的文件将要求连接到服务器,不会进行缓存。
• FALLBACK - 在这个列表标题下的文件如果不能访问时,则显示特定的页面。
完整的一个文件如下面的例子所示:
CACHE MANIFEST
# 2012-02-21 v1.0.0
/theme.css
/logo.gif
/main.js
NETWORK:
login.asp
FALLBACK:
/html5/ /offline.html
提示:
#开头的代表注释。
*可以用表示所有的其它资源或者文件。例如:
NETWORK:
*
表示所有的资源或者文件都不会缓存。
4.更新缓存
一旦一个应用被缓存,它将保持缓存除非一下情况发生:
• 用户删除了缓存
• manifest文件被修改
• 应用缓存被程序修改
所以一旦文件被缓存,除了人为的修改情况,浏览器将会持续的显示缓存版本内容,即使你修改了服务器文件。为了让浏览器更新缓存,你只能去修改manifest文件。
:以"#"开始的行是注释行,但是可以有其它用处。如果你的修改只涉及到一个图片或者javascript功能,那些变化是不会被重新缓存的。在注释中更新日期和版本是让浏览器重新缓存你的文件的一个方法
:浏览器可以有很多不同大小限制的缓存数据(有些浏览器允许5M的缓存数据)。
服务端消息
还有一个经常使用的场景是:当服务端的数据发生变化时,如何让客户端知道?这在以前的做法是:页面主动去查询服务端是否有更新。根据前面的介绍,我们知道,使用WebSocket可以实现双向通讯。这里再介绍另外一个HTML5中新特性:服务端消息(Server-Sent Events)。
在HTML5中,承载这项特性的对象是EventSource对象。
使用步骤如下:
1.检查浏览器对EventSource对象的支持性,这个大家都知道了:
if(typeof(EventSource)!=="undefined")
{
// Yes! Server-sent events support!
// Some code.....
}else {
// Sorry! No server-sent events support..
}
2.服务器端的发送消息代码
服务器端的发送更新消息很简单:设置content-type头信息为”text/event-stream"后,你就可以发送事件。以ASP代码为例:
<%
Response.ContentType="text/event-stream"
Response.Expires=-1
Response.Write("data: >> 服务器时间" & now())
Response.Flush()
%>
3.浏览器端的接收消息代码
var source=new EventSource("demo_sse.php");
source.onmessage=function(event){
document.getElementById("result").innerHTML+=event.data + "
";
};
代码说明:
• 创建一个EventSource对象,指定发送更新的页面URL (这里是demo_see.jsp)
• 每一次一个更新接收后,onmessage事件就触发
• 当onmessage时间触发,将得到的数据设置到id="result"的元素中
EventSource对象除了onmessage事件外,还有处理错误的onerror事件,连接建立的onopen事件等。
桌面通知 - 准HTML5特性 桌面通知功能能够让浏览器即使是最小化状态也能将消息通知给用户。这和WebIM是最为天然的结合。不过,目前支持该特性的浏览器只有Chrome。弹窗是大家深恶痛绝的东西,所以开启这项特性需要得到用户的许可。