《javascript高级程序设计》笔记(二十三)

离线应用与客户端存储

(一)离线检测

navigator.onLine属性,值为true表示设备能上网,否则为离线,但在不同浏览器有差异。单独使用navigator.onLine不能确定网络是否联通,但请求发生错误时检测它仍然有用。

online和offline   当网络从离线变成在线或在线变成离线 会触发者两个事件。

检测应用是否离线,在页面加载后,先通过navigator.onLine取得初始状态,然后通过这两个事件确定网络是否变化。

IE6+(只支持navigator.onLine属性)  Firefox3   Safari 4    Opera 10.6    Chrome    iOS 3.2

(二)应用缓存

appcache     为开发离线Web应用而设计。   描述文件列出要下载和缓存的资源。

<html>的manifest属性中指定这个文件的路径。

status属性表示应用缓存的当前状态。

Firefox 3+    Safari  4+    Opera 10.6    Chrome

(三)数据存储

1.cookie

服务器对任意HTTP请求发生Set-Cookie HTTP头作为响应的一部分。

HTTP /1.1 200 OK
Content-type:  text/html
Set-Cookie:  name=value
Other-header:  other-header-value

这个HTTP相应设置以name为名称、value为值的一个cookie,名称和值都以URL编码传递。

浏览器通过为每个请求添加Cookie HTTP头将信息发送给服务器

GET  /index.html  HTTP/1.1
Cookie:  name=value
Other-header:  other-header-value

①限制

每个域的cookie总数有限,尺寸也有限制。

②cookie的构成

名称:不区分大小写。必须经过URL编码。

值:储存在cookie的字符串值,必须被URL编码。

域:cookie对哪个域有效。默认认作来自设置cookie的那个域。

路径:对于指定域的那个路径,应该向服务器发送cookie。

失效时间:cookie何时应该被删除的时间戳,值是GMT格式的日期。

安全标志:指定后,cookie只有在使用SSL连接时才发送到服务器。

每一段信息作为Set-Cookie的一部分,用分号加空格分隔

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:  other-header-value

域、路径、失效时间和secure标志都是服务器给浏览器的提示,这些参数不会作为发送给服务器的cookie信息的一部分,只有名值对才发送。

③javascript的cooki

BOM的document.cookie属性会因为使用它的方式不同而表现出不同行为。

当用来获取属性值时,document.cookie返回当前页面可用的所有cookie的字符串,一系列由分号隔开的名值对,必须使用decodeURIComponent()对名和值进行URL编码。

当用于设置值时,document.cookie属性可以设置一个新的cookie字符串,会被解析并添加到现有的cookie,除非设置的名称已存在,否则不会覆盖。

        var cookieName = encodeURIComponent(name) + "=" +encodeURIComponent("Nicholas") + "; domain=.worx.com; path/";

④子cookie

为了绕开浏览器的单域名下的cookie数限制而使用。常见格式:

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

子cookie一般也以查询字符串的格式进行格式化,然后这些值可以使用单个cookie进行存储和访问。

⑤关于cookie的思考

2.IE用户数据

IE 5 使用持久化用户数据,首先使用CSS某个元素指定userData行为,然后使用setAttribute方法保存数据,为了将数据提交到浏览器还要调用save()告诉它数据空间的名称。下次页面载入后可以使用load()指定  同样的数据空间来获取数据。removeAttribute()方法指定删除某元素数据。

3.Web存储机制

Web Stroage的目的是克服由cookie带来的一些限制,当数据需要被严格控制在客户端时,无需持续将数据发回服务器,它的两个主要目标是:提供一种在cookie之外存储会话数据的途径、提供一种存储大量可以跨会话存在的数据的机制。

sessionStorage和globalStorage对象以window对象属性存在

IE8+ Firefox 3.5+ Chrome 4+ Opera 10.5+

①Stroage类型

提供最大的存储空间

②seessionStorage对象

存储特定于某个会话的数据,只保持到浏览器关闭,主要用于只针对会话的小段数据的存储。

③globalStroage对象

目的是跨越会话存储数据,有特定的访问限制。

④localStroage对象

在修订过的HTML5规范作为持久保存客户端数据的方案取代了globalStorage。

⑤stroage事件

对storage对象任何修改都会在文档上触发storage事件。

⑥限制

每个来源都有固定大小的空间保存自己的数据。

4.IndexedDB

是在浏览器保存结构化数据的一种数据库,其思想是创建一套API,方便保存和读取javascript对象,还支持查询和搜索。

操作完全是异步进行,差不多每一次操作都要注册onerror或onsuccess事件处理程序。

①数据库

它的最大特色是使用对象保存数据,而不是使用表。

②对象存储空间

使用对象存储空间,如果数据库版本与传入的版本不匹配可能要创建新的对象存储空间。在创建对象存储空间必须指定键,作为唯一的数据。

③事务

调用transaction()方法可以创建事务,任何时候想读取或修改数据都通过事务来操作。

④使用游标查询

在需要检测多个对象的情况下需要在事务内部创建游标。游标是指向结果集的指针,先指向结果的第一项,接到查询下一项的指令时才指向下一项。

⑤键范围

由IDBKeyRange的实例表示。

⑥设定游标方向

openCursor()可接受两个参数。

⑦索引

创建索引先要引用对象存储空间,然后调用createInedx()方法。

⑧并发问题

只有浏览器仅有一个标签页使用数据库的情况下,调用setVersion才能完成操作。

⑨限制

只能由同源页面操作,不能跨域共享信息;每个来源的数据库占用的磁盘空间有限制。

时间: 2024-11-08 20:07:02

《javascript高级程序设计》笔记(二十三)的相关文章

javascript高级程序设计——笔记

javascript高级程序设计--笔记 基本概念 基本数据类型包括Undefined/Null/Boolean/Number和String 无须指定函数的返回值,实际上,未指定返回值的函数返回的是一个特殊的undefined值 变量.作用域和内存问题 基本类型值在内存中占据固定大小的空间,因此保存在栈内存中 引用类型的值是对象,保存在堆内存中 确定一个值是哪种基本类型用typeof,确定一个值是哪种引用用instanceof 所有变量都存在于一个执行环境当中,这个执行环境决定了变量的生命周期,

《javascript高级程序设计》第十三章知识点

第十三章知识点总结 1.事件流: ①事件冒泡:事件开始时由最具体的事件接受,逐级向上传播到较为不具体的节点. ②事件捕获:不太具体的节点更早的接受事件,最具体的节点应该最后接到事件. 事件流包括三个阶段:事件捕获阶段.处于目标阶段.事件冒泡阶段. 2.事件处理程序 3.事件对象 IE 属性 除了上面的鼠标/事件属性,IE 浏览器还支持下面的属性: 属性 描述 cancelBubble 如果事件句柄想阻止事件传播到包容对象,必须把该属性设为 true. fromElement 对于 mouseov

javascript高级程序设计笔记1

最近在看javascript高级程序设计,看之前觉得自己的js学得还不错,然后,看了没几页就觉得自己好像没有学过一样,这主要写写我以前不完全了解的一些知识. 首先是关于基本数据类型的,从Number开始,以前经常用parseInt来转换数值,看过书才知道,这个函数的本意是专门用于把字符串转换成数值,而且以前也不知道它具体是怎么一个转换规则.先来看看Number()函数的转换规则: 1.如果是Boolean 值,true 和false 将分别被转换为1 和0.2.如果是数字值,只是简单的传入和返回

【javascript高级程序设计笔记】第六章OOP

忙了一段时间,加了将近一个月的班. 书也落下没看,上次看到第七章(这部分笔记大概还是9月份的吧),偶尔看到很吃力.看的速度慢下来. 学习就是一个慢慢积累慢慢沉淀的过程.看书时没有明显觉得提升.但在看完书后近段时间工作中写代码,明显感觉效率还是有提升,基础知识牢固了. 这本书是第二次看,这次很认真的遍读和做笔记,笔记的文字均是自己边看边敲的,这样才更好的真正的吸收到一部分吧! 这些天在看web响应式设计:HTML5和CSS3实战 第6章 面向对像的程序设计 6.1.1属性类型 ECMAScript

JavaScript高级程序设计:第十三章

第十三章 一.理解事件流 事件流描述的是从页面中接收事件的顺序. 1.事件冒泡 IE的事件流叫做事件冒泡,即事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点.以下面的HTML页面为例: <!DOCTYPE html> <html> <head> <title>Event Bubling Example</title> </head> <body> <div id="myDiv"&g

javascript高级程序设计笔记(第5章 引用类型)

1.Object类型 两种方式定义:对象字面量.new 两种方式访问:括号.点 2.Array类型 2.1  定义方式:new Array.数组字面量 2.2  lenght属性:可以利用它方便的想数组末尾添加元素 2.3  检测数组 instanceof isArray()方法  2.4  toString().soLocaleString().valueOf().join()方法 2.5.栈方法   push()方法:逐个添加到数组末尾,并返回修改后的数组长度 pop()方法:返回数组的最后

JavaScript高级程序设计:第十三章 事件

JavaScript与HTML之间的交互是通过事件实现的. 一.事件流 首先我们要明白事件流的概念.当我们点击一个按钮时,也点击了按钮的容器元素,甚至也点击了整个事件.事件流描述就是从页面中接收事件的顺序.在主流浏览器中有两种事件接收方式.一种是IE提出的事件冒泡流,另一种是Netscape提出的事件捕获流.顾名思义,事件冒泡流是从被点击的最小元素逐渐向上索引DOM树,而事件捕获的思想是不太具体的节点先捕捉到事件,然后事件沿DOM树逐渐向下,一直传播到事件的实际目标. 由于老版本浏览器不支持事件

【javascript高级程序设计笔记】第一章与第三章

第1章 javascript简介 1.2Javascript实现 一个完整的javascript实现由下列三个不同的部分组成 核心(ECMAScript) 提供核心语言功能 文档对象模型(DOM) 提供访问和操作网页内容的方法和接口 浏览器对象模型(BOM)提供与浏览器交互的方法和接口 ECMAScript 它规定了这门语言的下列组成部分: 语法  类型  语句  关键字 保留字 操作符 对象 ECMA-262第5版,发布于2009年. 文档对象模型(DOM) Document Object M

javascript高级程序设计--笔记01

概述 JavaScript的实现包含三个部分: 1  核心(ECMAScript)   提供核心语言功能 2  文档对象模型(DOM)  一套提供了访问以及操作网页内容的API 3  浏览器对象模型(BOM)  一套提供了与浏览器交互的API ECMAScript仅仅定义了这门语言的基础,如定义了:语法.类型.语句.关键字等,实际上这门语言本身不包含输入输出定义. 而现实中,ECMAScript大多借用了某些宿主环境(如web浏览器,Node,Adobe Flash)来实现丰富的功能,这些宿主环

javascript事件小结(事件处理程序方式)--javascript高级程序设计笔记

1.事件流:描述的是从页面中接收事件的顺序. 2.事件冒泡:IE的事件流叫做事件冒泡,即事件开始从具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到不具体的节点(文档). 3.事件捕获:指不太具体的节点应该更早接收到事件,而具体的节点应该是最后接收到事件. 4.DOM事件流:“DOM2级事件”规定的事件流包含三个阶段:事件捕获,处于目标阶段和事件冒泡阶段.(实际的目标元素在捕获阶段接不会收到事件) IE不支持DOM事件流,Opera.safari.chrome.firefox支持