会员登录 | 会员注册 | 意见建议 | 网站地图

站长资源综合门户

当前位置:首页 > 站长学院 > 建站经验 > HTML5::初学者使用 Application Cache 指南

HTML5::初学者使用 Application Cache 指南

时间:2012-03-19 18:23:57   作者:   来源:   点击:

NETWORK:

这一部分中所列出的资源都是需要联网使用的资源。它们都不会进入cache中,即使用户处于离线状态。这部分可能会使用Wildcards。

FALLBACK:

可选部分,指定了如果资源获取失败,将会呈现怎样的页面。第一个URL是资源,第二个就是fallback页面。两个URL都必须是相对地址,并且由同一个manifest文件指定。可以使用Wildcards。

注意:这三部分可以以任何顺序在manifest文件中出现,并且每部分都可以在一个manifest文件中出现多次。

下面的manifest文件定义了一个“catch-all”页面(offline.html),这个页面将会在用户试图离线访问网站根节点时显示。它还指明了需要联网使用的其他资源(如远程站点上的资源)。

CACHE MANIFEST

# 2010-06-18:v3

# Explicitly cached entries

index.html

css/style.css

# offline.html will be displayed if the user is offline

FALLBACK:

/ /offline.html

# All other resources (e.g. sites) require the user to be online.

NETWORK:

*

# Additional resources to cache

CACHE:

images/logo1.png

images/logo2.png

images/logo3.png

注意:引用了你的manifest文件的HTML文件都会自动被缓存,因此,没有必要在你的manifest文件中再指定这个文件,但是,在manifest文件中指定这个文件是一种更好的做法。

注意:页面上基于SSL的HTTP cache headers以及caching restrictions都会被cache manifests重写。因此,基于https的页面也能离线工作。

更新缓存(CACHE)

如果一个应用是在离线情况下,那么它会保持它的缓存状态,除非有以下事件发生:

用户清除了浏览器中存储有你的站点的数据。

manifest file 被修改了。注意:修改了在manifest文件中列出的某个文件并不会让浏览器重新缓存资源。必须是manifest文件本身改变了,才会重新进行缓存。

app cache通过编程更新了。

缓存状态CACHE STATUS

在程序中,你可以通过window.applicationCache 对象来访问浏览器的app cache。你可以查看 status 属性来获取cache的当前状态:

 

var appCache = window.applicationCache;

switch (appCache.status) {

case appCache.UNCACHED: // UNCACHED == 0

return ‘UNCACHED’;

break;

case appCache.IDLE: // IDLE == 1

return ‘IDLE’;

break;

case appCache.CHECKING: // CHECKING == 2

return ‘CHECKING’;

break;

case appCache.DOWNLOADING: // DOWNLOADING == 3

return ‘DOWNLOADING’;

break;

case appCache.UPDATEREADY: // UPDATEREADY == 4

return ‘UPDATEREADY’;

break;

case appCache.OBSOLETE: // OBSOLETE == 5

return ‘OBSOLETE’;

break;

default:

return ‘UKNOWN CACHE STATUS’;

break;

};

 

为了通过编程更新cache,首先调用 applicationCache.update()。这将会试图更新用户的 cache(要求manifest文件已经改变)。最后,当 applicationCache.status 处于 UPDATEREADY 状态时, 调用applicationCache.swapCache(),旧的cache就会被置换成新的。

 

var appCache = window.applicationCache;

appCache.update(); // Attempt to update the user’s cache.

if (appCache.status == window.applicationCache.UPDATEREADY) {

appCache.swapCache(); // The fetch was successful, swap in the new cache.

}

 

注意:像这样使用 update()和swapCache()并不会将更新后的资源 呈现给用户。这仅仅是让浏览器检查manifest文件是否发生了更新,然后下载指定的更新内容,重新填充app cache。因此,要让用户看到更新后的内容,需要两次页面下载,一次是更新app cache,一次是更新页面内容。

好消息是,你可以避免两次页面下载带来的麻烦。为了让用户能看到你的站点的最新版本,设置一个监听器来监听页面加载时的updateready 事件。

 

// Check if a new cache is available on page load.

window.addEventListener(‘load’, function(e) {

window.applicationCache.addEventListener(‘updateready’, function(e) {

if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {

分享到:

网友评论

热门建站经验