前言

补漏洞系列~今天来动手体验一下HTML5中的离线应用之mainifest缓存清单。实际上H5还提供了一个JavaScript接口来用于更新缓存文件的方法以及对缓存文件的操作。
在Chrome中,输入以下地址就可以查看浏览器的本地缓存:


chrome://cache/

关于manifest

离线应用,就是没有网络的时候,我也可以访问它的这个静态页面,虽然我们可能打开了某个网页,突然断网之后,这个网页的内容也不会消失,但是刷新之后,其实这个网页就GG了,如果配置了manifest,就可以实现刷新也不会消失内容。
所以什么是manifest
manifest是一个清单文件,在里面列出了离线访问时所需要的文件清单。
它的MINE类型是text/cache-manifest,我们要实现它的传输,就必须要在服务器中配置这个类型方法。

配置服务器

我这里用的是Apache,在Apache的conf文件夹下,找到mime.types这个文件,然后找到下面这行:


text/cache-manifest manifest

如果前面有#号(代表注释掉了),就去除,说明Apache原来并没有实现这个类型。当然我的是默认开启的,而且它写的对应的文件类型是appcache,我就在后面又加了一个manifest,这样也可以对应啦。

编写.manifest文件

在你想要实现离线应用的那个网站目录下,新建一个cache.manifest文件,当然啦文件名随便起,只要格式是这个就行。
这个文件的内容分为三个部分:

  • CACHE MANIFEST:必须,后面跟着缓存的信息,每个站点有5MB来存储数据,如果文件无法加载,那么整个过程将无法进行下去。
  • NETWORK:罗列的文件需要网络才能访问。
  • CACHE:manifest文件的默认入口,下载到本地后会被缓存。
  • FALLBACK:备份内容,一行写两个(对应资源文件 回调页面),如果资源文件找不到,就会去显示回调页面

这些部分没有先后顺序,并且可以出现多次

举个例子


CACHE MANIFEST
#version 1.0 # 以下资源必须联网使用
NETWORK:
login.php # 指明缓存入口
CACHE:
index.html
style.css FALLBACK:
index.html 404.html

修改HTML文件

在标签处加一个属性把文件引入即可:


<html manifest="cache.manifest">...</html>

访问浏览器

访问配置好的页面,会发现控制台在慢慢处理信息哦,这里我河蟹一些信息:


???.cn/:1 Document was loaded from Application Cache with manifest http://???/cache.manifest
22:01:47.823 ???.cn/:1 Application Cache Checking event
22:01:47.823 ???.cn/:1 Application Cache NoUpdate event

把网关掉,会发现页面刷新,或者打开一个窗口输入URL,也能访问哦!

【补充】
可能碰到一个报错:Application Cache Error event: Manifest fetch failed
原因可能是:

  • 服务器未配置manifest类型。
  • 写的.manifest文件格式错误。

原文地址:https://segmentfault.com/a/1190000014962111

小DEMO之manifest初体验的更多相关文章

  1. [转]Python爬虫框架--pyspider初体验

    标签: python爬虫pyspider 2015-09-05 10:57 9752人阅读 评论(0) 收藏 举报  分类: Python(8)  版权声明:本文为博主原创文章,未经博主允许不得转载. ...

  2. 微信小程序DEMO初体验

    小程序虽然被炒的很热,但是绝大部分人却从未亲自体验过,在2017年的上班第一天,献上一个小程序DEMO,您可以体验! 注意:由于微信限制,只能使用扫一扫来体验下方小程序DEMO. DEMO首页截图如下 ...

  3. 【尝新】微信小程序初体验

    文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/?t=1474644089434 根据文档地址中下载微信开发工具后,按照文档指引可以创建一个快速体验的小d ...

  4. 微信小程序初体验,入门练手项目--通讯录,部署上线(二)

    接上一篇<微信小程序初体验,入门练手项目--通讯录,后台是阿里云服务器>:https://www.cnblogs.com/chengxs/p/9898670.html 开发微信小程序最尴尬 ...

  5. Taro开发微信小程序的初体验

    了解Taro 听说Taro是从几个星期前开始的,在一次饭桌上,一个小伙伴说:"Hey, 你听说了Taro么,听说只需要写一套程序就可以生成H5,小程序以及RN的代码模板,并且类似于React ...

  6. 从一个小demo开始,体验“API经济”的大魅力

    写在前面 “API经济”这个词是越来越火了,但是"API经济"具体指的是什么,相信很多人还没有个明确的认识.不过今天我可不打算长篇大论的去讲解一些概念,我们就以“电话号码归属地查询 ...

  7. #使用abp框架与vue一步一步写我是月老的小工具(2) 后台搭建初体验

    #使用abp框架与vue一步一步写我是月老的小工具(2) 后台搭建初体验 一.续上前言 关于这个小玩意的产品思考,假设我暂时把他叫我是月老热心人 这是一个没有中心的关系链,每个人进入以后都是以自己为中 ...

  8. 微信小程序开发初体验

    微信小程序上线几天了,趁着周末补了一下JS,然后今天参照文档和教程写了个小demo 文档地址       教程地址 看文档就看了一点时间,因为以前没接触过JS框架,但是接触过PHP框架= = ,所以理 ...

  9. wx小程序初体验

    小程序最近太火,不过相比较刚发布时,已经有点热度散去的感觉,不过这不影响我们对小程序的热情,开发之前建议通读下官网文档,附链接:https://mp.weixin.qq.com/debug/wxado ...

随机推荐

  1. HDU-ACM“菜鸟先飞”冬训系列赛——第10场

    Problem A 题意 给出l(房子宽度),d(pole距离房子的垂直距离),s(绳子长度),求可覆盖的面积 分析 一共四种情况 \[1.s<=d\] \[2.s<=sqrt(d*d+l ...

  2. bzoj 1567: [JSOI2008]Blue Mary的战役地图【二分+hash】

    二维哈希+二分 说是二维,其实就是先把列hash了,然后再用列的hash值hash行,这样可以O(n)的计算一个正方形的hash值,然后二分边长,枚举左上角点的坐标然后hash判断即可 只要base选 ...

  3. NOIp 2014 寻找道路【图的遍历/最短路】By cellur925

    题目传送门 比较裸的图论,结果自己还是没做出来,我真菜. 我们根据题意,只要把不能通向终点的点求出,然后再分别以这些点为起点,求出它们能到达的点,这些点也不能在路径上. 之后跑一个最短路即可. 注意以 ...

  4. MySQL 一对多查询,合并多的一方的信息

    select   c.name,  (select   group_concat(name) from student   s   where  s.class_id =c.id ) from  cl ...

  5. 用代码设置 RelativeLayout.LayoutParams

    1.注意 不能在RelativeLayout容器本身和他的子元素之间产生循环依赖,比如说,不能将RelativeLayout的高设置成为WRAP_CONTENT的时候将子元素的高设置成为 ALIGN_ ...

  6. 【先定一个小目标】Postgresql允许远程访问配置修改

    1.解决不能连接远程postgresql: postgresql默认情况下,远程访问不能成功,如果需要允许远程访问,需要修改两个配置文件,说明如下: 1.postgresql.conf 将该文件中的l ...

  7. 转 ORA-00054 的解决方法

    统有一个不用的索引,想删除这个索引, SQL> drop index GPSTIME_GLOBAL_INDEX  2  /drop index GPSTIME_GLOBAL_INDEX      ...

  8. 为什么JAVA虚拟机分为线程共享和非线程共享?

    大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区) ,Heap(堆) , Program Counter Register(程序计数器) , VM Stack(虚拟 ...

  9. TC 609DIV2(950)

    Problem Statement      Vocaloids Gumi, Ia, and Mayu love singing. They decided to make an album comp ...

  10. 动态添加出来append的元素加事件

    $("body").on("click","#box span",function(){里面执行的东西}) span  是动态添加出来的