h5离线应用

h5离线应用

所谓离线应用,就是断网之后还可以运行的应用。h5提供了application cache,可以保存网页的离线数据。CSDN的Markdown编辑器就运用了application cache,在没有网络的情况下,一样可以正常使用,这就是一个很好的离线应用。

application cache和http缓存有时候很相似,http缓存也可以把浏览过的网页缓存下来,在断网情况下也可以打开。但是http缓存是会过期的,而application cache是永久的。http缓存像是一个快照,只是保存了网页的某个状态,而离线应用是实实在在的在运行。当网页是一个“单页应用”时更能体现两者的区别。

在chorme浏览器下,可以访问:

  • application cache 地址: chrome://appcache-internals/
  • http cache 地址 : chrome://cache/

查看两者。

实现一个h5离线应用

首先,需要一个清单文件,指出哪些文件是需要离线存储的。文件的名称和后缀都是可以是随意的,如下面这个文件可以命名为:appcache.manifest,如果服务器识别不了这样的后缀,则需要将这种后缀配置到服务器

CACHE MANIFEST
CACHE:  
common.css
common.js
icon.jpgNETWORK:   
imgs/good1.jpg
imgs/good2.jpgFALLBACK:
good1.jpg  offline/imgs/good1.jpg
  • CACHE MANIFEST : 清单文件的第一行必须是这个,表示这是一个清单文件

  • CACHE: 后面跟着需要离线的文件

  • NETWORK: 后面跟着的文件表示是需要从网络上获取的

  • FALLBACK: 这个标签是可选的,后面每一行有两个文件,表示当第一个文件访问不了时,使用第二个文件。

需要注意的是,清单上的文件路径不能有错,只要一个有错,所以文件都不会离线保存。

第二步是,在需要离线的网页的<html>标签上增加manifest属性,指向上面的清单文件。

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

每一个需要离线的网页都需要配置一个manifest属性,从这也可以看出,h5的application cache更适合“单页应用”,而不是网站。

就这样,一个离线应用就完成了,当你第一次打开带有manifest属性的网页时,浏览器就会把离线文件下载下来,以后每次运行,都直接从缓存里拿这些文件。

在chorme浏览器下,可以按F12打开调试工具,选择“网络”,设成“offline”来模拟断网:

这里写图片描述

要观察到效果,禁用掉http缓存更好。

更新离线文件

  • 自动更新

    离线文件一旦缓存下来,浏览器以后都将使用离线文件,不会再向服务器请求该文件,也不知道服务器端的文件是否更新。但是,浏览器会在每次打开网页的时候,检查manifest文件是否是最新,所以只要manifest文件发生变化时,浏览器就会更新一遍离线文件,这便是自动更新。

  • 手动更新

    可以通过window.applicationCache对象来手动更新离线缓存。

参考

  1. 应用缓存初级使用指南

  2. 九种浏览器端缓存机制知多少

  3. 使用HTTP缓存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[deviceone开发]-do_RichLabel的简单示例

一、简介 do_RichLabel支持html格式的文本内容&#xff0c;但是只支持部分标签&#xff0c;这个示例列出了一些支持的常用标签&#xff0c;android能支持的标签相对ios更少 二、效果图 三、相关下载 https://github.com/do-project/code4do/tree/master/richlabel_demo 四、相关…

使用rpm包升级ntpd服务_服务器准备升级,小程序将暂停使用

今天说3件事情&#xff1a;一、由于用户增速超出了我们的预期&#xff0c;为确保法助攻小程序的使用体验&#xff0c;我们购买了更高配置的服务器&#xff0c;目前&#xff0c;内部测试已完成&#xff0c;现决定对服务器进行正式升级。服务器升级时间&#xff1a;8月7日(本周五…

重装Nodejs后,webstorm代码报错问题

项描述现象之前没有问题的代码&#xff0c;突然出现很多奇怪的错误原因没有更新webstorm的Nodejs路径设置造成的解决办法重新设置webstorm的Nodejs路径&#xff0c;见下图 重新选择Nodejs安装目录&#xff0c;点击应用

java peek函数_基础篇:JAVA.Stream函数,优雅的数据流操作

写在开头&#xff1a;本文是转载于掘金上的一篇文章&#xff0c;已获得原作者授权&#xff0c;我会在文章最后放上原作者和原文链接。前言平时操作集合数据&#xff0c;我们一般都是for或者iterator去遍历&#xff0c;不是很好看。java提供了Stream的概念&#xff0c;它可以让我…

mongodb 数组添加_NoSQL之MongoDB——简介

MongoDB是一种开源文档型数据库&#xff0c;它具有高性能&#xff0c;高可用性&#xff0c;自动扩展性1.文档数据库MongoDB用一个文档来表示一条记录&#xff0c;文档的数据结构由键值对组成。MongoDB文档类似于JSON对象&#xff0c;字段值可能是文档&#xff0c;数组&#xff…

Buying Feed, 2010 Nov (单调队列优化DP)

约翰开车回家&#xff0c;又准备顺路买点饲料了&#xff08;咦&#xff1f;为啥要说“又”字&#xff1f;&#xff09;回家的路程一共有 E 公里&#xff0c;这一路上会经过 K 家商店&#xff0c;第 i 家店里有 Fi 吨饲料&#xff0c;售价为每吨 Ci 元。约翰打算买 N 吨饲料&…

一次真实的XXS攻击

这是一个真实的事&#xff0c;一家比较大的公司举办的一个全国性的投票&#xff0c;然而&#xff0c;页面确实写得很烂&#xff0c;做假太容易。 首先&#xff0c;找到投票按钮的源代码&#xff1a; 这个”tp”类就是投票事件的定位关键字。 然后&#xff0c;打开source下的源…

使用Chrome Dev Tools, deb.js调试Javascript小技巧

本文讲介绍一些基于 Chrome Dev Tools 的实用的客户端Javascript 调试小技巧。我将重点关注那些无从下手&#xff0c;不知道该在哪儿添加断点的情景。 首先看下本文主题&#xff1a; 找出哪段代码正在修改了页面找出谁发送了某个ajax请求在抛出异常时触发断点条件断点事件断点…

jenkins Auth fail验证失败

重新设置密码转载于:https://www.cnblogs.com/cocoat/p/5982931.html

CSS3 Perspective

一 、在元素的父元素上使用 在父元素上使用Perspective属性可以使用透视投影视图&#xff0c;在父元素上加上&#xff1a; perspective:400px 表示相机距离屏幕位置为400px。默认相机对准父元素的中心&#xff0c;要重设相机的焦点可以使用&#xff1a; perspective-origin…

状态模式案例分析

需求 初始状态下&#xff0c;【暂停按钮】不可点&#xff0c;所有数轴可调: 点击【动态波】后&#xff0c;【暂停按钮】可点&#xff0c;所有数轴可调&#xff1a; 点击【暂停按钮】后&#xff0c;“暂停”变为“播放”&#xff0c;所有数轴不可调&#xff1a; 分析需求 上面…

Linux系统IP地址

1、IP地址概述 2、配置IP地址 查看IP地址 在网卡上绑定一个IP地址 同一张网卡上绑定多个IP 绑定一块网卡设备 修改或删除IP地址 IP地址概述 这里不多赘述&#xff0c;参考《计算机网络》课程。 配置IP地址 [rootweekend110 ~]# ifconfigeth0    Link encap:Ethernet HWadd…

qwidget多个窗口同步_Linux命令screen—终端切换,工作环境保存,画面同步,防断网...

Screen基础Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话&#xff0c;并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。创建一个新的窗…

Linux文件基本操作

使用declare命令创建一个变量名为 tmp 的变量&#xff1a; 使用号赋值运算符为变量 tmp 赋值为 dunzhu&#xff1a; 读取变量的值&#xff0c;使用echo命令和$符号&#xff08;$符号用于表示引用一个变量的值&#xff0c;初学者经常会忘记输入&#xff09; 在dunzhu家目录创建一…

DES 加密 解密

EncryptUtil feiyangklDES 一行代码完成DES加密&#xff0c;加密模式 DES CBC DEMO GIF DEMO 简介 最近项目中用到DES加密&#xff0c;在这里整理成篇&#xff0c;供大家参考阅读&#xff0c;在使用该demo过程中&#xff0c;你可能会遇到一些问题&#xff0c;首先你需要看一下…

markdown绘图插件----mermaid简介

作者&#xff1a;黄永刚 mermaid简介 当撰写文档的时候&#xff0c;对于流程图的生成大多使用Visio等繁重的工具&#xff0c;没有一种轻便的工具能够画图从而简化文档的编写&#xff0c;就像markdown那样。 mermaid解决这个痛点&#xff0c;这是一个类似markdown语法的脚本语言…

Java NIO 教程

NIO 概述 NIO有三个核心组件&#xff1a; 通道&#xff08;Channels&#xff09;缓冲器&#xff08;Buffers&#xff09;选择器&#xff08;Selectors&#xff09; 实际上&#xff0c;NIO的组件和类远不止这三个&#xff0c;但这个三个组件是核心。至于其它组件&#xff0c;…

threejs相机和渲染器

渲染器 渲染器其实代表的是canvas标签。 渲染器的类型 WebGLRender 使用WebGL来渲染图形&#xff0c;速度较快&#xff0c;但是有些机器不支持WebGL。 CanvasRender 使用canvas2d来渲染图形&#xff0c;在较老的版本上&#xff0c;主要是用来渲染2D图形。现在这个渲染器在…

threejs概览

threejs术语和概念 threejs的API很长&#xff0c;有很多概念和术语&#xff0c;理解了这些概念和术语&#xff0c;才能更好的使用threejs。这些概念和术语都藏在API右侧的大纲中&#xff0c;下图简单整理了一下这些概念&#xff1a; 这些概念又分为四个大类&#xff08;见上图…

leetcode数组汇总_[LeetCode] 300. 最长上升子序列

题目链接&#xff1a; https://leetcode-cn.com/problems/longest-increasing-subsequence难度&#xff1a;中等通过率&#xff1a;43.0%题目描述:给定一个无序的整数数组&#xff0c;找到其中最长上升子序列的长度。示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释:…