HTML5权威指南--Web Storage,本地数据库,本地缓存API,Web Sockets API,Geolocation API(简要学习笔记二)

1.Web Storage

HTML5除了Canvas元素之外,还有一个非常重要的功能那就是客户端本地保存数据的Web Storage功能。

以前都是用cookies保存用户名等简单信息。

 

但是cookie有下面几个问题:

a:大小:cookies的大小被限制在4KB

b:带宽:cookies随HTTP事务一起被发送,因此会浪费一部分发送的cookies时使用的带宽。

c:复杂性:要正确的操纵cookies是很困难的。

 

Web Storage分为两种:

<1>sessionStorage

    将数据保存在session对象中。浏览器关闭数据消失。

    保存数据:sessionStorage.setItem(key,value);

    读取数据:变量=sessionStorage.getItem(key);

<2>localStorage

    将数据保存在哭护短本地的硬件设备中。浏览器关闭数据依旧存在。(分浏览器的,如果保存在

    在谷歌浏览器,下次打开IE是不会有的)

    保存数据:localStorage.setItem(key,value);

    读取数据:变量=localStorage.getItem(key);

 

保存时不允许重负保存相同的键名。保存后可以修改键值,但不允许修改键名。

 

<3>保存少量数据

js:

//暂时数据
function saveStorage(id){
 var target=document.getElementById(id);
 var str=target.value;
 sessionStorage.setItem("message",str);

}

function loadStorage(id){
 var target=document.getElementById(id);
 var msg=sessionStorage.getItem("message");
 target.innerHTML=msg;

}

//永久数据
function saveStorage(id){
 var target=document.getElementById(id);
 var str=target.value;
 localStorage.setItem("message",str);

}

function loadStorage(id){
 var target=document.getElementById(id);
 var msg=localStorage.getItem("message");
 target.innerHTML=msg;

}

function clearStorage(){
 localStorage.clear();
}

 

html:

<p id="msg"></p>
<input type="text" id="input">
<input type="button" value="保存数据" onclick="saveStorage('input')">
<input type="button" value="读取数据" onclick="loadStorage('msg')">
<input type="button" value="清除本地数据" onclick="clearStorage('msg')">

结果:

 

<4>作为简易的数据库来用

使用json作为键值。

js:

function save(){
 var data=new Object;
 data.name=document.getElementById('name').value;
 data.tel=document.getElementById('tel').value;
 data.address=document.getElementById('address').value;

 var str=JSON.stringify(data);
 localStorage.setItem(data.name,str);
 alert("数据已保存");
}

function read(){
 var find=document.getElementById('readName').value;
 var JsonData=JSON.parse(localStorage.getItem(find));
 console.log(JsonData.tel);
 document.getElementById('readTel').innerHTML=JsonData.tel;
 document.getElementById('readAddress').innerHTML=JsonData.address;
}

 

html:

姓名:<input type="text" id="name"/><br/>
手机:<input type="text" id="tel"/><br/>
地址:<input type="text" id="address"/><br/>
<input type="button" value="保存数据" onclick="save()"/><br/><br/>

姓名:<input type="text" id="readName"/><br/>
手机:<p id="readTel"></p>
地址:<p id="readAddress"></p>
<input type="button" value="读取数据" onclick="read()"/> 

结果:

 

 

2.本地数据库

 

 

<1>两个必要步骤

   a: 创建访问数据库的对象

   b: 使用事务处理

首先必须用openDatabase方法创建一个访问数据库的对象:

var db=openDatabase('mydb','1.0','Test DB',2*1024*1024);

第一个参数:数据库名

第二个参数:版本号

第三个参数:数据库的描述

第四个参数:数据库的大小

如果该数据不存在,则创建它。

 

 

<2>executeSql

第一个参数:需要执行的sql语句

第二个参数:sql语句中使用到的参数数组

               如:  

第三个参数:执行sql语句成功时候的回调函数

               如:

     该函数的第一个参数为transaction对象,第二个为执行查询操作时返回的查询到的结果数据集对象。

第四个参数:执行sql语句错误时调用的回调函数

              如:

              

 

 

3.本地缓存API(离线web应用程序)

->离线web应用程序:当哭护短本地与web应用程序没有建立连接时,也能正常在客户端本地使用该web应用。

 

程序进行有关操作。

<1>本地缓存与浏览器网页缓存的区别

 

开发出更为强大的离线应用程序。

 

<2>manifest文件

 

第一行必须是"CACHE MANIFEST"文字。当然运行离线web应用程序的时候,需要对服务器进行配置,让服务器支持text/cache-manifest这个MIME类型。Apache服务器和IIS服务器都有相应的配置。manifest文件中的注释以”#“开头。

 

<3>applicationCache对象

该对象代表了本地缓存,可以使用它来通知用户本地缓存中已经被更新,也允许用户手工更新本地缓存。

当浏览器对本地缓存进行更新时,会触发applicationCache的updateready事件。

applicationCache.onUpdateReady=function(){
    alert("本地缓存已被更新!");
}

 

 

<4>swapCache方法

该方法用来手动执行本地缓存的更新,他只能在applicationCache对象的updateready事件被触发时调用。

如:

applicationCache.onUpdateReady=function(){
    alert("正在更新本地缓存!");
    applicationCache.swapCache();
    alert("本地缓存已被更新!");
}

 

如果不加applicationCache.swapCache();会怎么样?

不加的话,本地缓存也会被更新,但是更新的时间是在下次打开本页面时被更新。

加上的话,本地缓存会立即被更新。

看个具体的例子:

 

 

<5>applicationCache事件

 

 

 

4.跨文档消息传输

HTML5提供了跨域,跨文档的通信。

首先必须监视message事件。

window.addEventListener("message",function(){.....},false);

 

使用window对象的postMessage方法向其他窗口发送消息。

otherWindow.postMessage(message,targetOrigin);

otherWindow为要发送窗口对象的引用。

第一个参数:要发送的消息文本

第二个参数:接受消息的对象窗口URL地址

 

//发送消息
iframe.postMessage("您好","目标地址");
//接受消息
window.addEventListener("meeage",function(ev){
     alert("从"+ev.origin+"那里传过来的信息:\n\""+ev.data+"\"");
},false);

 

5.Web Sockets API

Web Sockets是HTML5提供的在web应用程序中客户端与服务器断之间进行的非HTTP的通信机制。

建立的这种通信机制是实时的,永久的,除非被显式的关闭。

Web Sockets API不仅仅可以发送文本,而且还可以使用JSON对象来发送一切js中的对象。

如:

var webSocket=new WebSocket("ws://localhost:8005/socket");(客户端写法)
//onmessage事件接受服务器传来的数据:
webSocket.onmessage=function(event){
    var data=event.data;
}

//onopen事件监听socket的打开事件:
webSocket.onopen=function(event){

}

//onclose事件监听socket的打开事件:
webSocket.onclose=function(event){

}

webSocket.close();

 

另外通过读取readyState的属性值来获取WebSocket的状态。

connecting(数字0),表示正在连接。

open(数字1),表示已建立连接。

closing(数字2),表示正在关闭连接。

closed(数字2),表示已关闭连接。

 

6.Web Workers API

Web Workers是在html5中新增的,用来在web应用程序中实现后台处理的一项技术。

在使用HTML4与javascript创建的Web程序中,因为所有的处理都是在单线程内执行的,所以话费的事件比较长。

程序界面长期处于没有响应的状态。最糟糕的是可能直接崩溃。

所以Web Workers就诞生了。Web WorkersAPI,用户可以用它创建一个在后台运行的线程。将可能耗费时间较长的处理交给后台去执行。

这样对用户在前台界面的执行操作就完全没有影响了。实现了一种多线程的功能。

worker.onmessage=function(event){
    //处理接收到的消息
}

 

 

如:

主页面js:

var worker=new Worker("Sum.js");
worker.onmessage=function(event){
    alert("sum="+event.data);
}

function cal(){
    var num=parseInt(document.getElementById("num").value,10);
    //将数值传递给线程
    worker.postMessage(num);
}
 

 

主页面html:

输入数值:<input type="text" id="num"/>
<button  onclick="cal()">计算</button>

 

 

 

单独的Sum.js

onmessage=function(event){
    var num=event.data;
    var result=0;
    for(var i=0;i<=num,i++){
        result+=i;
    }
    postMessage(result);
}

 

 

7.Geolocation API(地理位置信息)

<1>取得当前地理位置

void getCurrentPosition(onSuccess,onError,options);

 

onSuccess:获取当前地理位置成功时的回调函数

用法:

navigator.geolocation.getCurrentPosition(function(position){
    //成功时的处理
})

 

onError:获取当前地理位置失败时的回调函数

用法:该回调使用error对象作为参数,有两个属性

code:

    用户拒绝了位置服务(属性值为1)

    获取不到位置信息(属性值为2)

    获取信息超时错误(属性值为3)

message

例子:

 

 

options:可选属性列表

a:enableHighAccuracy:是否要求高精度的地理位置信息。

b:timeout:对地理位置信息的获取做一个超时限制。

c:maximumAge:对地理位置信息进行缓存的有效时间。

 

<2>在页面时使用google地图

转载:http://www.cnblogs.com/zqzjs/p/4855922.htm

时间: 2024-09-23 15:38:31

HTML5权威指南--Web Storage,本地数据库,本地缓存API,Web Sockets API,Geolocation API(简要学习笔记二)的相关文章

JavaScript权威设计--jQuery,Ajax.animate,SVG(简要学习笔记二十)[完结篇]

1.$和jquery在全局命名空间中定义的唯一两个变量.   2.jquery是工厂函数,不是构造函数.他返回一个新创建的对象.   3.jquery的四种调用方式:     <1>传递CSS选择器(字符串)给$()方法       <2>传递Element,Document或Window对象给$()方法       <3>传递HTML文本字符串给$()方法.     如: var img=$("<img/>", //新建一个<im

JavaScript权威设计--事件冒泡,捕获,事件句柄,事件源,事件对象(简要学习笔记十八)

1.事件冒泡与事件捕获 2.事件与事件句柄   3.事件委托:利用事件的冒泡技术.子元素的事件最终会冒泡到父元素直到跟节点.事件监听会分析从子元素冒泡上来的事件. 事件委托的好处:     1.每个函数都是对象,都会占用内存,内存中对象越多,性能越差.     2.必须事先指定所有事件处理程序而导致的DOM访问次数,会延迟整个页面的交互就绪时间. 怎样处理由于事件较多引起的性能差: 1.采用事件委托技术,限制简历的连接数量 2.在不需要的时候移除事件处理程序 例子: html: <div id=

JavaScript权威设计--JavaScript函数(简要学习笔记十)

1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"likeZqz()".有些些函数是用作内部用的或者为私有函数通常以一条下划线为前缀,就像"_zqzName()".   2.以表达式方式定义的函数 如: var zqz=function (){ return "zhaoqize"; } 在使用的时候必须把它赋值给一

JavaScript权威设计--JavaScript函数(简要学习笔记十一)

1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScript构造函数调用的语法是允许省略实参列表和圆括号的. 如: var o=new Object(); //->等价于 var o=new Object;   第四种:使用call()与apply()间接调用(放在后面详细说明)   2.函数的实参与形参--可选形参 先看一个例子: function g

HTML5权威指南--标签新变化,文件API,拖放API(简要学习笔记一)

1.标签元素更加语义化   2.内容类型仍然为"text/html"    扩展符仍然为html或者htm.    <1>DOCTYPE 声明<!DOCTYPE html>就可以.不需要使用版本声明.    <2>制定字符编码<meta charset="UTF-8">,不需要使用HTML4中的<meta http-equiv="Content-type" content="text

.net+oracle+crystalReports开发web应用程序学习笔记(二)

oracle|web|笔记|程序 上次提到基本的配置注意问题,现在开始实际开发oracle中的问题 一 oracle 数据库的连接 但你装了oracle的客户端,在配置时就已经指定了数据库服务器,所以连接时主要由三个元素就可以连接上数据库,数据库的名称(即SID),用户名,密码 SqlConnection con=new SqlConnection("Provider=MSDAORA.1;User ID=UserID;Data Source=xf;Password=password")

JavaScript权威设计--Window对象之Iframe(简要学习笔记十四)

1.Window对象属性的文档元素(id) 如果在HTML文档中用id属性来为元素命名,并且如果Window对象没有此名字的属性,Window对象会赋予一个属性,它的名字是id属性的值,而他们的值指向表示文档元素的HTMLElement对象. Window对象是以全局对象的形式存在于作用域链的最上层,这就意味着HTML文档中使用的id属性会成为可以被脚本访问的全局变量. 如: <button id="but"/> 就可以通过全局变量but来引用此元素.   2.多窗体窗口(

JavaScript权威设计--JavaScript脚本化文档Document与CSS(简要学习笔记十五)

1.Document与Element和TEXT是Node的子类. Document:树形的根部节点 Element:HTML元素的节点 TEXT:文本节点   >>HtmlElement与HtmlDocument a:HtmlElement对象表示HTML中的一个个元素. b:HtmlDocument对象表示 HTML 文档树的根.HTMLDocument 接口对 DOM Document 接口进行了扩展,定义 HTML 专用的属性和方法.   >>HTML的DOM对象 a:DOM

JavaScript权威设计--JavaScript变量,作用域,声明提前(简要学习笔记四)

1.宿主对象与宿主环境 宿主对象:由ECMAScript实现的宿主环境提供的对象,可以理解为:浏览器提供的对象.所有的BOM和DOM都是宿主对象.   宿主环境:一般宿主环境由外壳程序创建与维护,只要能提供js引擎执行的环境都可称之为外壳程序.如:web浏览器等.   2.日期的转换 var now =new Date(); typeof(now+1) //string typeof(now-1) //number now==now.toString(); //true now>(now-1)