浏览器相关--H5本地存储
因为项目需要,最近研究了一下HTML5本地存储相关的东西,在这简单的记录一下。
浏览器存储主要包括一下几个部分
1. cookie
2. localStorage
3. sessionStorage
4. indexDB
5. websql
6. window变量
7. flash cookie
下面具体说一下,虽然也没特别具体。。。
1、cookie
这个存储用了很久了,而且也是以前大多网站十分喜欢的存储站点。但是也很容易被清除。同时cookie会在每一次通信过程中传向服务端。用法十分亲民,
document.cookie = a + '=' + b + ';expires=' + new Date().toGMTString()
同时cookie有一个很好的地方就是,它本身有一个过期时间属性,可以用来标注一个变量的有效期。而cookie一旦过期就会被自动删除掉。
2、localStorage、sessionStorage
这两个就很好说啦,大家使用频率很高的。
- localStorage: 持久存储,只要用户不主动删除就会一直存在。
- sessionStorage:面向session的浏览器存储,因此只存在于一个页面的生命周期内,关闭即清除
两者均采用键值对的形式存储数据,使用方式如下
localStorage.setItem(name, value);
localStorage.getItem(name);
localStorage.name; sessionStorage.setItem(name, value);
sessionStorage.getItem(name);
sessionStorage.name;
3、indexedDB
内嵌在浏览器端的非关系型数据库,数据以键值对的形式存储,兼容性良好。
indexDB直接操作的存储对象是ObjectStore,这有点类似其他数据库中table概念。
基础语法
/*
* 获取indexDB对象
*/
var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
/*
* 创建数据库,存在则打开,不存在则创建
*
* name: 数据库名
* ver: 版本号
*/
var request = indexedDB.open(name, ver);
/*
* indexDB的三个回调函数
* 1、错误回调
* 2、版本升级/数据库第一次创建调用函数
* 3、数据库创建成功回调
* ojName:ObjectStore,存储空间名
*/
request.onerror = function(e) {};
request.onupgradeneeded = function(event) {
var db = event.target.result; var store = db.createObjectStore(ojName, {
keyPath: "name",
unique: false
})
};
request.onsuccess = function(event) {
var idb = event.target.result; // 获得数据库实例
var tx = idb.transaction(ojName, "readwrite"); // 创建事务
var objst = tx.objectStore(ojName);
var qr = objst.add({
"name": name,
"value": value
})
};
// 关闭数据库
idb.close()
// 其他语法
/*
* 其他语法
* 1、增
* 2、删
* 3、改
* 4、查
*/
objst.add({
key: 'key',
value: 'value'
}) objst.delete(key) objst.put({
key: 'key',
value: 'value'
}) var qr = objst.get(name);
var indexdbCode = '';
qr.onsuccess = function(event) {
if (qr.result === undefined) {
indexdbCode = '';
console.log('==='+indexdbCode);
} else {
indexdbCode = qr.result.value;
console.log('>>>'+indexdbCode);
}
};
具体使用
下面是一个简单的添加数据的例子
function storeIndexDB(name, value) {
try {
if (!('indexedDB' in window)) {
indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
}
if (indexedDB) {
var ver = 1;
var request = indexedDB.open("db_test", ver); // 打开或穿件数据库,ver为版本号
request.onerror = function(e) {;
}
request.onupgradeneeded = function(event) {
var db = event.target.result;
var store = db.createObjectStore("friends", {
keyPath: "name",
unique: false
})
}
if (value !== undefined) {
request.onsuccess = function(event) {
var idb = event.target.result;
if (idb.objectStoreNames.contains("friends")) {
var tx = idb.transaction(["friends"], "readwrite");
var objst = tx.objectStore("friends");
var qr = objst.add({
"name": name,
"value": value
})
}
idb.close();
}
}
}
} catch (e) {}
}
4、websql
内嵌在浏览器的关系型数据库,是的前端可以像在使用mysql、Oracle一样的写sql语句,并存储信息。兼容性良好。存储后可在浏览器resource中查看。
基础语法
/*
* 创建数据库,存在则打开,不存在则创建
*
* name: 数据库名
* version: 版本号
* desc:描述
* size:大小
*/
var database = window.openDatabase(name, version, desc, size);
/*
*执行sql语句
*
* sql: 就是要执行的sql语句,用过mysql或者oracle的一定会非常熟悉
* params:sql中需要匹配的参数,本身是一个数组,参数中间用英文逗号间隔
* callBackFunSuccess:sql执行成功回调函数
* callBackFunErr:sql执行失败回调函数
*/
database.transaction(function(tx) {
tx.executeSql(sql,params,callBackFunSuccess,callBackFunErr);
});
具体使用
// 创建数据库
var database = window.openDatabase("sqlite_test", "", "test", 1024 * 1024);
// 新建表test
database.transaction(function(tx) {
tx.executeSql("CREATE TABLE IF NOT EXISTS test(" +
"id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " +
"name TEXT NOT NULL, " +
"value TEXT NOT NULL, " +
"UNIQUE (name)" +
")", [],
function(tx, rs) {},
function(tx, err) {});
});
// 向test添加数据
database.transaction(function(tx) {
tx.executeSql("INSERT OR REPLACE INTO test(name, value) " +
"VALUES(?, ?)", [name, value],
function(tx, rs) {},
function(tx, err) {});
});
// 从test查询数据
database.transaction(function(tx) {
tx.executeSql("SELECT value FROM test WHERE name=?", ['tom'],function(tx, result1) {
if (result1.rows.length >= 1) {
console.log(result1.rows.item(0).value);
} else {
console.log(sqlCode);
}
},
function(tx, err) {});
});
// 更新数据
db.transaction(function(tx) {
tx.executeSql("update test set mytitle=? where mytitle = 'fsafdsaf'",['xp'],null,null);
});
// 删除test中全部数据
db.transaction(function(tx) {
tx.executeSql("delete from test",[],null,null);
});
// 删除某个数据
db.transaction(function(tx) {
tx.executeSql("delete from test where id = ?",['10010'],null,null);
});
// 删除表
db.transaction(function(tx) {
tx.executeSql("DROP TABLE test");
});
5、window变量
这是一个比较猥琐的地方,生命周期有限,一般大家也不会去使用。但是对于全局变量的临时存储来说,还是一个不可多得的好地方。
6、flash cookie
flash cookie现在用的地方比较多,在这里先不细说,后面单开一个好好理一理。
除了上述的浏览器存储外,还有一些其他的。比如IE使用的userData,globalStorage等等。写个例子,不多说了,你懂得。
// IE USERDATA
try {
var elm = this.createElem("div", "userdata_el", 1);
if (elm.addBehavior) {
elm.style.behavior = "url(#default#userData)"; if (value !== undefined) {
elm.setAttribute(name, value);
elm.save(name);
} else {
elm.load(name);
return elm.getAttribute(name);
}
}
} catch (e) {}
// IE GLOBALSTORAGE
var globalStorage = window.globalStorage
if (globalStorage) {
var host = this.getHost();
try {
if (value !== undefined) {
globalStorage[host][name] = value;
} else {
return globalStorage[host][name];
}
} catch (e) { }
}
上面呢,主要就是现在浏览器中比较常用的存储技术,说的不是特别详细,只是介绍了一下简单的使用,想细研究的可以再去看看官方资料和大神们的博客。
大神们的博客,推荐大家看一下,说的很详尽,
1、html5 web IndexedDB使用详解: http://blog.csdn.net/rdj_miss/article/details/51285097
2、HTML5本地存储——IndexedDB:http://www.cnblogs.com/dolphinX/p/3415761.html
3、HBuilder webApp开发 Websql增删改查操作:http://blog.csdn.net/zhuming3834/article/details/51471434
浏览器相关--H5本地存储的更多相关文章
- H5本地存储(转)
H5本地存储 一.本地存储由来的背景 众所周知Html4时代Cookie的大小.格式.存储数据格式等限制,网站应用如果想在浏览器端存储用户的部分信息,那么只能借助于Cookie.但是 ...
- H5本地存储详细使用教程(localStorage + JSON数据存储应用框架)
一.Web Storage教程 1.概述: 对于Web Storage来说,实际上是Cookies存储的进化版.如果了解Cookie的人几乎一看Web Storage就会用,如果你从来没用过没了解过C ...
- 利用H5本地存储localStorage、sessionStorage
最近的业务处理上,要使用cookie缓存储一下数据,公司的cookie还搞出点问题.而用户的浏览器都是利用微信的内置,普遍支持h5的本地存储.于是利用了这个... 现代浏览器普遍开始支持H5本地存储, ...
- h5 本地存储
H5本地存储有两个API,一个是Web Storage,还有一个是Web SQL.不管是哪一个,都是基于JavaScript语言来使用,接下来我就教你怎么使用H5本地存储,本文篇幅较大,JS代码较多, ...
- H5本地存储详解
H5之前存储数据一般是通过 cookie ,但是 cookie 存的数据容量比较少.H5 中扩充了文件存储能力,可存储多达 5MB 的数据.现在就实际开发经验来对本地存储 ( Storage ) 的使 ...
- H5 本地存储一
localStorage(本地存储),可以长期存储数据,没有时间限制,一天,一年,两年甚至更长,数据都可以使用.sessionStorage(会话存储),只有在浏览器被关闭之前使用,创建另一个页面时同 ...
- H5本地存储一
localStorage(本地存储),可以长期存储数据,没有时间限制,一天,一年,两年甚至更长,数据都可以使用.sessionStorage(会话存储),只有在浏览器被关闭之前使用,创建另一个页面时同 ...
- H5本地存储技术
H5 Web存储技术 前言 web存储技术在初期的时候被定义为HTML5的一部分作为其API.后来被独立出来作为一份独立的标准. web存储标准包含localStorage对象和sessionStor ...
- H5本地存储技术和微信小程序中的本地存储
1.H5的本地存储 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
随机推荐
- CUBA Platform —— 开源的、可靠的企业级应用开发利器
原文:CUBA Platform: An Open-Source Java Framework for Rapid Application Development 翻译:CUBA China CUBA ...
- IIS 站点 共享目录
1.先建立站点,再设置文件夹为共享,Everyone 2.Mac电脑 Everyone不能访问,必须建立用户
- HTTP协议状态码学习
一直以来都在追求实战,从而忽视了对理论知识的深入学习和理解.这并不可怕,可怕的是当意识到自己的不足时,没有行动. 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 ...
- c 语言 随机生成数函数
int theRandom = 0; theRandom = arc4random_uniform(3)//随机生成一个从0到2的数 或者 #include "stdio.h" # ...
- Java实现进程调度算法(二) RR(时间片轮转)
一.概述 因为这次os作业对用户在控制台的输入输出有要求,所以我花了挺多的代码来完善控制台的显示. 也因为我这次要实现多个类似算法,所以将一些共性单独提取出来作为一个类. 如果只想要和算法有关的核心代 ...
- 洛谷P3763 [TJOI2017]DNA(后缀数组 RMQ)
题意 题目链接 Sol 这题打死我也不会想到后缀数组的,应该会全程想AC自动机之类的吧 但知道这题能用后缀数组做之后应该就不是那么难了 首先把\(S\)和\(S0\)拼到一起跑,求出Height数组 ...
- C# Task.FromResult的用法
Task.FromResult用来创建一个带返回值的.已完成的Task. 场景一:以同步的方式实现一个异步接口方法比如有一个接口包含异步方法. interface IMyInterface { Tas ...
- Android 自定义简易的方向盘操作控件
最近在做一款交互性较为复杂的APP,需要开发一个方向操作控件.最终用自定义控件做了一个简单的版本. 这里我准备了两张素材图,作为方向盘被点击和没被点击的背景图.下面看看自定义的Wheel类 publi ...
- 《深入理解JVM》第二章读书笔记
Java内存区域与内存溢出异常 运行时数据区域 JVM执行java程序的时候有一个运行时数据区,每个区域有自己的作用,了解这些区域有助于我们理解JVM.JVM运行时数据区如图所示: 程序计数器 该区域 ...
- Android 线程池的类型、区别以及为何要用线程池
每个 Android 应用进程在创建时,会同时创建一个线程,我们称之为主线程,负责更新 UI 界面以及和处理用户之间的交互,因此,在 Android 中,我们又称之为 UI 线程.一个进程中 UI 线 ...