Javascript学习笔记19 离线应用和客户端存储

JavaScript之离线应用与客户存储 离线应用就是在没有网的情况下也能运行的应用。 阅读详情

离线检测

HTML5的navigator.onLine属性可以检测设备的网络状态,值为true表示能上网,为false表示离线

if (navigator.onLine){
    //正常工作
} else {
   //离线任务
}

除此之外HTML5还定义了两个事件online和offline,当网络从离线变为在线或从在线变为离线时分别触发这两个事件

window.addEventListener("online",function(){
    alert("Online");
},false);

window.addEventListener("offline",function(){
    alert("Offline");
},false);

应用缓存

HTML5的应用缓存(appcache),是专门为开发离线web应用而设计的。要想在缓存中保存数据,需要使用一个描述文件(manifest file),列出要下载和缓存的资源。

manifest 文件可分为三个部分:

  • CACHE MANIFEST - 在此标题下列出的文件将在首次下载后进行缓存,等价于CACHE
  • NETWORK - 在此标题下列出的文件需要与服务器的连接,且不会被缓存
  • FALLBACK - 在此标题下列出的文件规定当页面无法访问时的回退页面(比如 404 页面)
CACHE MANIFEST
file.js
file.css

NETWORK
*

FALLBACK
info.html

并将描述文件和页面关联起来,描述文件的后缀名一般为appcache

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

Javascript的applicationCache对象的status属性可以检测当前应用缓存的状态

  • 0:无缓存
  • 1:闲置,即缓存未更新
  • 2:正在下载描述文件并检查更新
  • 3:正在下载描述文件中指定的资源
  • 4:更新完成
  • 5:无法访问应用缓存

事件

  • error:发生错误时触发
  • progress:文件下载过程中不断触发
  • updateready:页面新的应用缓存下载完毕,可以通过swapCache()使用
  • cached:应用缓存完整可用

方法

  • update():检查描述文件是否更新,若更新,则下载新的资源
  • swapCache():当触发了updateready事件时,说明新版本的应用缓存已可用,调用该方法启用新缓存

HTTP Cookie, 最初用于在客户端存储会话消息,其介绍和相应的HTTP头部字段见如下两篇博客介绍
https://blog.youkuaiyun.com/zjw_python/article/details/79217644
https://blog.youkuaiyun.com/zjw_python/article/details/79310100

Cookie由以下几部分构成

  • 名称:不区分大小写
  • 值:必须被URL编码
  • 域:表示cookie对哪个域是有效的
  • 路径:对于指定域中的那个路径,才对服务器发送Cookie
  • 失效时间:表示cookie何时应该被删除,GMT格式日期(Wdy,DD-MM-YYYY HH:MM:SS GMT)
  • 安全标识:指定后,cookie只有在使用SSL连接的时候才会发送到服务器
HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: name=value; expires = Mon, 22-Jan-07 07:10:24 GMT; domain=.wrox.com; path=/; secure
other-header:value

路径,域,失效时间,安全标志等都是服务器发给浏览器的指示,这些参数不会被发送到服务器,只有名称-值对才会被发送。Cookie的数目和尺寸不同的浏览器有限制,不要创建超过浏览器限制数目和尺寸的cookie,否则可能会被废弃

Javascript处理cookie
页面的cookie信息都以字符串的形式存储在document.cookie属性中,可以使用javascript进行处理

name1=value1;name2=value2;name3=value3

所有名称和值都是经过URL编码的,必须使用decodeURIComponent()来解码

当设置cookie值时,可以为document.cookie设置一个新的cookie字符串,其会被解释并添加到现有的cookie集合中,而不会覆盖原有的cookie,除非cookie名称已存在,使用的格式与Set-Cookie头中一致,在设置值时,建议先使用encodeURIComponent()进行URL编码

name=value;expires=time;path=domain_path;secure

没有删除已有cookie的直接方法,需要使用相同的路径、域、安全选项再次设置cookie,并将失效时间设置为过去的时间

子cookie用于绕开单域名下cookie数目的限制,可使用查询字符串的形式存储在单个cookie值中,比如

name=name1=value1&name2=value2&name3=value3&name4=value4&name5=value5

Web Storage

Web Storage提供一种在cookie之外的存储会话数据的途径,并提供了大量存储空间。

Storage类型
该类型提供以下方法,可以直接调用,也可通过Storage对象间接调用

  • getItem(name):根据指定的名字name获取对应的值
  • key(index):获得index位置处的值的名字
  • removeItem(name):删除由name指定的名值对儿
  • setItem(name,value):为指定的name设置一个对应的值

Storage类型还具有length属性用于判断值对的数目。Storage类型只能存储字符串,非字符串数据在存储前会被转换为字符串

sessionStorage对象
用于存储特定于某个会话的数据,数据只保持到浏览器关闭。sessionStorage对象是Storage的一个实例,可以使用Storage类型的方法或直接设置属性来存储数据。sessionStorage对象中的数据只能被最初给对象存储数据的页面访问到,对于多页面有限制。

sessionStorage.setItem("name","zjw");

sessionStorage.book = "javascript";

var name = sessionStorage.getItem("name");

sessionStorage.removeItem("book");

localStorage对象
localStorage是Storage的实例,可以像使用sessionStorage一样来使用它。要访问同一个localStorage对象,页面必须来自同一个域名(子域名无效),且使用同一种协议,在同一个端口上。

localStorage.setItem("name","zjw");

localStorage.book = "javascript";

var name = localStorage.getItem("name");

localStorage.removeItem("book");

storage事件
对Storage对象进行任何修改(保存、删除数据),都会在文档中触发storage事件,这个事件的event对象具有以下属
性:

  • domain:发生变化时的存储空间域名
  • key:设置或删除的键名
  • newValue:如果是设置值,则是新值,若为删除值,该值为null
  • oldValue:键被更改之前的值

浏览器对于每个来源(协议、域和端口)的存储数据有限制,sessionStorage和localStorage一般都是2.5MB。

73、离线应用、客户端存储与JavaScript最佳实践 本文介绍了离线应用与客户端存储技术,重点讨论了IndexedDB的使用及其限制,同时涵盖了JavaScript代码的可维护性、性能优化和代码部署的最佳实践。通过这些方法,开发者可以提升Web应用的质量,确保代码的稳定性、高效性和可扩展性。 阅读详情

相关推荐

74、离线应用、客户端存储与JavaScript最佳实践

本文探讨了离线应用和客户端存储的核心技术,包括IndexedDB的并发处理与限制、多种客户端存储方式的特点,以及JavaScript在实际开发中的最佳实践。重点介绍了提升代码可维护性的方法、性能优化技巧和生产环境部署策略,旨在帮助开发者构建高性能、易维护的Web应用程序。

u5v6w7的博客 61

离线缓存与客户端存储总结

离线缓存与客户端存储总结

越努力,越幸运! 7250

「转载」vaptcha 等手势验证码图像识别与轨迹提取(思路)

作者:文安哲 从博客重开以后就说要更文章,鸽了蛮久了,赶紧补上一篇嫖嫖各位老公的流量。 最近看群里面大家讨论研究手势验证码比较多,然后我也顺带研究做了一下,给各位老公们分享一下做的过程。 首先,一起来康康手势验证码长啥样! 大概就是长这个样子,需要按照图像中的那条轨迹再图片上滑动,不得不说这类验证码确实体验感拉满,让人很想立马关掉这个网站。 那么言归正传,这类验证码该怎么做识...

AI悦创·编程私教1v1 3597

JavaScript高级程序设计-第三版(离线应用与客户端存储)

JavaScript二十三、离线应用与客户端存储23.1 离线检测23.2 应用缓存23.3 数据存储 二十三、离线应用与客户端存储 23.1 离线检测 23.2 应用缓存 23.3 数据存储

qq_37112587的博客 538

从理想光源到部分相干:Abbe与Hopkins模型在计算光刻中的演进与选择

本文深入探讨了计算光刻中Abbe模型与Hopkins模型的演进与选择,分析了理想光源与部分相干光源在光刻仿真中的关键差异。Abbe模型基于理想点光源假设,计算简洁但存在精度局限;Hopkins模型则通过互强度函数和TCC技术,更准确地模拟现实中的部分相干光源,尤其适用于先进节点光刻工艺。文章还提供了模型选择的实用建议,帮助工程师在精度与效率间取得平衡。

weixin_29217235的博客 298

探针卡技术演进:从金线微针到MEMS探针的Wafer Sort革命

本文探讨了探针卡技术从传统金线微针到MEMS探针的演进,及其对晶圆测试(Wafer Sort)的革命性影响。随着芯片焊垫间距进入45微米以下,MEMS技术凭借其超高精度、超长寿命和卓越的信号完整性,成为应对高密度、高速及3D IC测试挑战的关键,显著提升了测试效率与稳定性。

lstm7chronicler的博客 365

Javascript离线应用与客户端缓存

离线应用与客户端存储 1.离线检测 navigator对象 navigator.onLine 属性表示当前设备是否在线,在线则返回 true,离线则返回 false 离线检测事件 online :当浏览器从离线变为上线时触发 offline:当浏览器从上线变为离线时触发 2.应用缓存 manifest file appcache是从浏览器缓存中抽取一部分缓存用来下载想要...

qq_41564928的博客 333

carsim与simulink联合仿真学习笔记(二)——使用C-class车模做driver model仿真(5 driver sensors)

Driver model 在carsim的Simulink库中自带外部驾驶员模型,打开后如图所示: 然后打开carsim中对应的数据集,如图所示: 具体仿真步骤不在赘述,注意到这里选择的是E-Class车模,那么如果我想选择C-Class车型进行仿真呢?点三角选择车型可以看到: 马赛克部分是我后来建的,如过没有使用过是没有马赛克部分的。那么既然这里没有C-class,又该怎么办呢? 创建C-...

xufuqiang2017的博客 4117

49-JavaScript高级程序设计-离线应用与客户端存储

一、离线应用 离线 Web 应用:在设备不能上网的情况下仍然可以运行的应用。(HTML5 一个重点) 开发离线 Web 应用的几个步骤: 1)确保应用知道设备是否能上网,以便下一步执行正确的操作。 2)应用必须能访问一定的资源(图像、JavaScript、CSS 等),只有这样才能正常工作。 3)必须有一块本地空间用于保存数据,无论能否上网都不妨碍读写。 ...

dandan666dandan的博客 259

MT5策略如何设置回测结果才能最接近实盘

摘要:在MT5回测中,选择"每笔分笔报价"模式最接近实盘交易,因其使用真实Tick数据模拟价格波动、点差和滑点。关键设置包括:下载高质量历史数据、合理设定点差和滑点、使用正常回测速度。该模式能准确测试挂单、止盈止损等策略,虽然速度较慢但结果最可靠,避免其他模式造成的失真,是评估交易策略表现的最佳选择。(149字)

weixin_38915451的博客 1877

VSCode初级使用教程详细版

Visual Studio Code(简称VSCode)是一款轻量级但功能强大的代码编辑器,支持多种编程语言,具有丰富的扩展插件,并内置了Git版本控制。VSCode工具满足绝大多数工作场景,使用场景包括不限于大学生作业代码编写、读研期间实验脚本编写、工作中项目代码编写与协作、数学建模竞赛中代码编写等。本文将从VSCode的安装开始,逐步介绍其基本使用方法和一些高级功能,帮助读者快速上手。

qq_37360300的博客 5万+

JavaScript中离线应用和客户端存储(cookies、sessionStorage、localStorage)

一、离线应用 所谓离线web应用,就是在设备不能上网的情况下仍然可以运行的应用。 开发离线web应用需要几个步骤:首先,确保应用知道设备是否能上网,以便下一步执行正确的操作;然后,应用还必须能访问一定的资源(图像、JavaScript、css等),只有这样才能正常工作;最后,必须有一块本地空间用于保存数据,无论能否上网都不妨碍读写。 1、离线检测 HTML5定义一个navigat...

Liuzhongbao123456的博客 259

osgEarth 球上显示地形数据库

osgEarth 球上显示地形数据库 本文展示了一种由DSM和DEM得到Osgb工程,并在osgEarth球上显示的方法。其中DSM、DOM到Osgb工程的转换由VPB(VirtualPlanetBuilder)来实现,并采用Model图层将Osgb工程在球上显示。 本文主要解决一下问题: VPB编译 VPB生成地形 地形在球上显示 目录 1 前言 2 VPB编译与使用 3 地形在osgEarth球上显示 内容 1 前言 VirtualPlanetBuilder是一个开源代码工具,用于根据

CPWWHSU的博客 2436

【JavaScript高级程序设计】第23章(离线应用与客户端存储)

23. 离线应用与客户端存储 离线应用要与传统客户端应用同场竞技 首先,要能确定设备能否上网,以便下一步执行正确的操作 然后,应用还必须能访问一定的资源(图像、JavaScript、CSS等) 最后,要有本地存储空间,无论是否上网都不妨碍读写 23.1 离线检测 属性 navigator.onLine 事件 online offline 23.2 应用缓存applicati...

等时钟成长 227

模型实战(31)之 yolo26 实现对手部关键点数据集 的训练与关键点检测

模型实战(31)之 yolo26 实现对手部关键点数据集 的训练与关键点检测

yohnyang的博客 209

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

FSO.js:客户端文件存储的强大工具

FSO.js:客户端文件存储的强大工具 项目介绍 FSO.js 是一个基于 JavaScript 的 FileSystemObject 库,旨在为客户端提供临时和永久文件存储功能。尽管其基于的文件系统 API 已被弃用,不再受大多数主流浏览器的支持,但 FSO.js 作为一个存档项目,仍然展示了其在客户端文件管理方面的强大能力。 项目技术分析 FSO.js 通过 JavaScript 实现了一系列...

gitblog_00363的博客 989

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

clipboard.js与IndexedDB:构建离线可用的客户端存储内容复制方案

你是否遇到过这样的场景:用户在离线状态下无法复制之前缓存的内容?或者需要复制大量历史数据时,因频繁请求服务器导致体验卡顿?传统的复制方案依赖即时DOM操作或服务器数据,无法满足离线可用、高效访问的需求。本文将展示如何通过clipboard.js与IndexedDB的组合,构建一个支持离线存储、高效查询的客户端复制解决方案,让用户随时随地复制所需内容。 读完本文你将掌握: - clipboard....

gitblog_00087的博客 427

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

JavaScript基础知识总结 15:JavaScript客户端存储

目录一、cookie1、限制2、cookie的构成二、Web Storage三、sessionStorage对象四、localStorage对象五、IndexedDB1、数据库2、对象存储3、事务4、插入对象5、通过游标查询6、索引六、总结七、JavaScript思维导图 一、cookie HTTP cookie通常也叫作cookie,最初用于在客户端存储会话信息。这个规范要求服务器在响应HTTP请求时,通过发送Set-Cookie HTTP头部包含会话信息。 1、限制 cookie是与特定域绑定的,设置c

学Java,找哪吒 7575

javascript高级程序设计学习笔记(十)---离线应用与客户端存储

离线应用与客户端存储 离线检测 HTML5定义了navigator.onLine属性,表示设备能否上网。 还有两个事件online和offline。当网络从离线变为在线或者从在线变为离线时,分别触发这两个事件。这两个事件在window对象上触发。 应用缓存 Appcache使用浏览器缓存中分出来的一块缓存区,可以使用一个描述文件,列出要下载和缓存的资源,在这保存数据。 在页面中,可以在< html>中的manifest属性值指定这个文件的路径,告诉页面哪里包含着描述文件。文件类型为text/ca

ningpeixi679的博客 175

RxDB前端数据库:构建高效离线应用的JavaScript数据存储方案

RxDB前端数据库:构建高效离线应用的JavaScript数据存储方案 【免费下载链接】rxdb pubkey/rxdb: RxDB是一款基于JavaScript实现的客户端数据库,适用于浏览器环境以及Node.js应用,支持实时同步、离线数据存储、冲突解决等功能,同时采用了RxJS响应式编程模型来处理数据变更。 ...

gitblog_00046的博客 1192

javascript-离线应用于客户端存储

23.1 离线检测 含义:设备能否上网 代码: navigator.onLine 注:IE6+和safari+5,firefox3+和opera16+,chrome最新的没问题 23.2 应用缓存 缓存的目的是专门为网页离线设计的,当然在在线情况也会缓存 机制:当用户在地址输入请求的地址去请求网页时,浏览器会先本地缓存中查看是否有对...

weixin_34206899的博客 79

JS中离线应用与客户端存储

1.离线检测:H5定义了navigator.online属性,为true 表示设备能上网 还定义了两个相关事件:online和offline 2 数据存储 cookie——HTTP coolie,客户...

QDY5945的博客 165

离线应用与客户端存储

一、离线检测 1. 属性 navigation.onLine 返回 true / false 2. 事件 online事件,从离线变为在线时触发 offline事件,从在线变成离线时触发 二、应用缓存 HTML5 的应用缓存(application cache),简称 appcache,是专门为开发离线 Web 应用而设计的。 1. 描述文件 该文件用于描述需要下在和缓存的资源,其文...

dingshige8508的博客 186

js之客户端存储

客户端存储是指将数据存储在客户端,可以设置存储的有效期。 客户端存储遵循“同源策略”。 主要有以下几种方式: web存储(localStorage/sessionStorage)、cookie、离线web应用、web数据库 1、localStorage/sessionStorage 存储有效期和作用域: localStorage存储的数据是永久性的,除非web应用刻意删除存储的数据,或用...

qq_31403519的博客 577

HTML5 Canvas动态绘制心型线和玫瑰线

HTML5的Canvas元素提供了丰富的绘图功能,能够使我们制作出许多精美的动画。本次将运用canvas绘制心型线和玫瑰线。1.心型线和玫瑰线绘制这两种曲线,首先我们分别选用两个参数方程(心型线和玫瑰线的参数方程不同,其形态特征也不一样,你可以根据你的需要选择合适的参数方程) 桃心型线的参数方程: x = 16 (sinθ)^3 y = 13 cosθ- 5 cos 2θ - 2 cos 3θ

zjw_python的博客 2万+
上一篇: Javascript学习笔记18 高级技巧(自定义事件 拖放)
下一篇: Javascript学习笔记20 代码优化技巧
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值