一. 什么是manifest

首先manifest是一个后缀名为minifest的文件,在文件中定义那些需要缓存的文件,支持manifest的浏览器,会将按照manifest文件的规则,像文件保存在本地,从而在没有网络链接的情况下,也能访问页面。

当我们第一次正确配置app cache后,当我们再次访问该应用时,浏览器会首先检查manifest文件是否有变动,如果有变动就会把相应的变得跟新下来,同时改变浏览器里面的app cache,如果没有变动,就会直接把app cache的资源返回,基本流程是这样的。

二. 使用方法

  1. html新增了一个manifest属性,可以用来指定当前页面的manifest文件。创建一个和html同名的manifest文件,比如页面为index.html,那么可以建一个index.manifest的文件,然后给index.html的html标签添加如下属性即可:

<html lang="en" manifest="index.manifest">

  2. manifest文件,基本格式为三段: CACHE, NETWORK,与 FALLBACK,其中NETWORK和FALLBACK为可选项。

CACHE MANIFEST
#version 1.3
CACHE:
test.css
NETWORK:
*

三. 注意事项:

  • 浏览器对缓存数据的容量限制可能不太一样(某些浏览器设置的限制是每个站点 5MB)。

  • 如果manifest文件,或者内部列举的某一个文件不能正常下载,整个更新过程都将失败,浏览器继续全部使用老的缓存。

  • 引用manifest的html必须与manifest文件同源,在同一个域下。

  • FALLBACK中的资源必须和manifest文件同源。

  • 当一个资源被缓存后,该浏览器直接请求这个绝对路径也会访问缓存中的资源。

  • 站点中的其他页面即使没有设置manifest属性,请求的资源如果在缓存中也从缓存中访问。

  • 当manifest文件发生改变时,资源请求本身也会触发更新。

四. 更多内容

  1. 为了实现离线缓存,manifest文件必须包含该html页面的所有资源文件。

  2. 通常manifest还有一个特别大的用途,就是前段页面的版本控制。

  一般来说,manifest文件可能如下:

CACHE MANIFEST
NETWORK:
*
CACHE:
index.html?SIMU_PATH_VERSION
css/dahuo_core.css?CSS_VERSION
css/index.css?CSS_VERSION
css/search.css?CSS_VERSION
js/zepto.min.js?JS_VERSION
js/dahuo_core.js?JS_VERSION
js/touchslider.js?JS_VERSION
js/webtools.js?JS_VERSION
js/config.js?JS_VERSION
js/search.js?JS_VERSION
js/index.js?JS_VERSION
js/webchat.js?JS_VERSION
#images
images/droploading.gif
images/loading.gif
images/search-index-icon.png
images/guideicon9.png
images/guideicon12.png
images/guideicon11.png
images/search-new.png
images/delete-button.png
images/simu_main.png

  3. 还差一步完成离线缓存页面,缓存API,数据可以缓存到localStorage

    一般来说,先执行获取缓存加载页面的方法,在发送API,比较返回数据与缓存数据是否相同。实现逻辑如下:

var Main = {
init: function() {
...
this.initIndex();
this.fetchData();
},
initIndex: function() {
var self = this;
var respData = DahuoCore.getLocal(self.localKey);
if ($.type(respData) == "string") {
respData = $.parseJSON(respData);
if ($.type(respData) == "object" && respData.status == "1") {
self.processData(respData.data);
}
}
},
var self = this;
$.ajax({
url: ...,
type: "GET",
dataType: "json",
data: {
...
},
complete: function(xhr, status) {
if (status == "success") {
var resp = $.parseJSON(xhr.response);
if ($.type(resp) == "object") {
if (resp.status == 1) {
var localData = DahuoCore.getLocal(self.localKey);
var newData = JSON.stringify(resp);
if (newData !== localData) {
if (resp.data) {
DahuoCore.setLocal(self.localKey, newData);
self.processData(resp.data);
} else {
DahuoCore.toast({ "content": "加载失败" });
}
}
} else if (resp.status == 0) {
DahuoCore.toast({ "content": resp.msg });
} else {
self.ajaxErrorHandler(xhr, status);
}
}
}
DahuoCore.loading.hide();
},
timeout: 30000
});
},
processData: function(data) {
...
}
}

  4. 大功告成。

    but,一点点瑕疵,当manifest更新时,浏览器并没有更新到最新的网页,而是下次进来时更新。

    为了解决这个问题,需要接受manifest更新事件,然后reload页面。于是:

function checkManifest() {
window.applicationCache.addEventListener('updateready', function(e) {
if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
window.applicationCache.swapCache();
window.location.reload();
}
}, false);
}

Html5离线缓存简介的更多相关文章

  1. HTML5 离线缓存Appcache

    创建一个和html同名的manifest文件,比如页面为index.html,那么可以建一个index.manifest的文件,然后给index.html的html标签添加如下属性即可: <ht ...

  2. HTML5离线缓存(Application Cache)

    HTML5离线缓存又名Application Cache,是从浏览器的缓存中分出来的一块缓存区,要想在这个缓存中保存数据,可以使用一个描述文件(manifest file),列出要下载和缓存的资源. ...

  3. HTML5 离线缓存管理库

    一.HTML5离线缓存技术 支持离线缓存是HTML5中的一个重点,离线缓存就是让用户即使在断网的情况下依然可以正常的运行应用.传统的本地存储数据的方式有 localstorage,sessionsto ...

  4. HTML5离线缓存问题

    HTML5离线缓存问题 1.应用程序缓存 什么是应用程序缓存(Application Cache)? HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问. ...

  5. html5离线缓存使用

    html5 离线缓存使用以及注意事项 1.index.html中加入离线缓存的声明文件 如:<!DOCTYPE html><html manifest="test.appc ...

  6. node.js与HTML5离线缓存

    最近正学到HTML5的离线缓存,却看到需要配置服务器.一下子就懵了,毕竟服务器的有关配置一般是很复杂的,而node.js的服务器是自己的代码生成的,这下要怎么配置?在网上搜索了很久,都没用关于node ...

  7. HTML5离线缓存攻击测试

    本实验采用局域网模拟,通过修改本地HOSTS文件来模拟域名以及DNS欺骗.合法网站使用Linux CentOS7的apache服务器搭建,IP为192.168.1.113,HOSTS文件中加入192. ...

  8. HTML5离线缓存

    参考文档:http://www.w3cschool.cc/html/html5-app-cache.html HTML5 应用程序缓存 又称离线缓存 ,即使断线了,刷新后也还是缓存了原来的页面,不会4 ...

  9. Html5离线缓存详细讲解

    离线缓存是Html5新特性之一,简单理解就是第一次加载后将数据缓存,在没有清除缓存前提下,下一次没有网络也可以加载,用在静态数据的网页或游戏比较好用.当然,Html5新的特性都不是所有浏览器都能支持的 ...

随机推荐

  1. Android 性能优化(22)*性能工具之「Hierarchy Viewer」 Hierarchy Viewer Walkthrough

    Hierarchy Viewer Walkthrough 1.In this document Prerequisites Setting the ANDROID_HVPROTO variable W ...

  2. 初识mybatis之入门案例

    我也是自学了一下,在idea中基于maven的mybatis的配置.有什么不对的地方,请指正,谢谢. 1.1咋们先来配置测试一下,配置mybatis的图解: 1.2 pom.xml需要mybatis的 ...

  3. Jquery 全选、反选问题的记录

    <div id="list"> <ul id="choseList" > <li><input type=" ...

  4. 神奇的Object.defineProperty

    vue.js和avalon.js 都是通过它实现双向绑定的. 对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值.定义对象可以使用构造函数或字面量的形式: var obj={}; o ...

  5. org.apache.jasper.JasperException: javax.el.PropertyNotFoundException: Property [xxx] not readable on type [xxx]

    由于javaBean中的属性是custFullName,所以在使用jsp的时候,通过el表达式获取属性的值<td>${m.CustFullName}</td>.但是加载页面的时 ...

  6. weex开发前配置

    weex 环境配置:win10 node java git weex-toolkit :npm install weex-toolkit -g在安装weex-toolkit的时候,尽量不要使用cnpm ...

  7. HDU_6016_(Bestcoder round #92 1002)_(dfs)(暴力)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6016 题意:给定男羊和女羊的朋友关系,即给定一个图,问从任意一只羊开始连续数四只不相同的羊的方法数. ...

  8. [Tensorflow] 使用 model.save_weights() 保存 Keras Subclassed Model

    import numpy as np import matplotlib.pyplot as plt import os import time import tensorflow as tf tf. ...

  9. CAD使用SetxDataDouble写数据(网页版)

    主要用到函数说明: MxDrawEntity::SetxDataDouble 写一个Double扩展数据,详细说明如下: 参数 说明 [in] BSTR val 字符串值 szAppName 扩展数据 ...

  10. 使用cloudcompare进行对比轨迹及评价

    0.预备知识: 我的系统是Ubuntu 16.04. 在其他发行版中,可能需要先安装snap(如有必要,请参阅相应的文档).快照发布在3个频道:“稳定”,“测试版”和“边缘”.“稳定版”和“测试版”频 ...