浏览器相关--H5本地存储

这一系列主要研究一下浏览器底层的一些东西,包括协议、存储、底层变量、部分API等。

今天首先介绍一下浏览器底层存储技术。



浏览器存储主要包括一下几个部分
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()

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

时间: 2024-10-23 23:25:02

浏览器相关--H5本地存储的相关文章

H5本地存储(转)

H5本地存储 一.本地存储由来的背景 众所周知Html4时代Cookie的大小.格式.存储数据格式等限制,网站应用如果想在浏览器端存储用户的部分信息,那么只能借助于Cookie.但是Cookie的这些限制,也就导致了Cookie只能存储一些ID之类的标识符等简单的数据,复杂的数据就更别扯了. 下面是Cookie的限制: 关闭浏览器再打开可读到 1, 大多数浏览器支持最大为 4096 字节的 Cookie. 2, 浏览器还限制站点可以在用户计算机上存储的 Cookie 的数量.大多数浏览器只允许每

h5 本地存储

H5本地存储有两个API,一个是Web Storage,还有一个是Web SQL.不管是哪一个,都是基于JavaScript语言来使用,接下来我就教你怎么使用H5本地存储,本文篇幅较大,JS代码较多,请耐心阅读. 一.Web Storage教程 1.概述: 对于Web Storage来说,实际上是Cookies存储的进化版.如果了解Cookie的人几乎一看Web Storage就会用,如果你从来没用过没了解过Cookie,没关系,看了这篇文章照样轻松玩转Web Storage.首先,学习Web

H5本地存储一

localStorage(本地存储),可以长期存储数据,没有时间限制,一天,一年,两年甚至更长,数据都可以使用.sessionStorage(会话存储),只有在浏览器被关闭之前使用,创建另一个页面时同意可以使用,关闭浏览器之后数据就会消失. HTML5 的本地存储 API 中的 localStorage 与 sessionStorage 在使用方法上是相同的,区别在于 sessionStorage 在关闭页面后即被清空,而 localStorage 则会一直保存.我们这里以 localStora

h5 本地存储和读取信息

参考:http://killtyz.com$(document).ready(function () { $('#add-input').focus(); $('#add-input').bind('keypress',function(event){ var value = $(this).val(); if( event.keyCode == "13" && value ) { var time = (new Date()).getTime(); addItem(t

H5本地存储sessionStorage和localStorage的区别

sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁.因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储.当用户关闭浏览器窗口后,数据立马会被删除.(特别提示:新建一个标签页面以后,即使跟前一个页面的地址相同,新建标签页面也获取不到前一个页面中获取或者设置的sessionStorage) localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的

h5本地存储storage

storage本地存储,似乎有点想起cookie,的确用法也类似于cookie.但是storage较cookie有不少好处: 存储量大:在客户端完成,不会请求客户端: storage分为sessionStorage和localStorage. 1.sessionStorage  临时存储,当页面关闭的时候,本地存储也就消失.并且sessionStorage的数据是不会共享的. 2.localStorage 永久删除,可以手动删除数据,数据是共享的. storage下有以下api: window.

H5本地存储

他们可以存储:  数组  json数据  图片  脚本  样式文件  : 客户端的存储的两个: 1.localStorage  没时间限制的数据存储() 方法有:.localStrage.getItem();localStrage.setItem();removeItem();localStrage.key()从0开始;.localStrage,clear(); 用它来存储图片需要通过一层canvas,大小和图片一致,渲染到canvas中,利用canvas的toDateURL()的方法存储到本地

H5本地存储二

众所周知,H5的storage有sessionstorage&localStorage,其中他们的共同特点是API相同 下面直接上代码,storage中的存储与删除: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <meta name="viewport" content="width=devic

兼容多浏览器的本地存储

在做考试系统时需要解决这样一个问题,就是当考生考试时可能出出现断网.关闭浏览器,刷新等问题,数据此时可能没有及时写入数据库,所以造成数据丢失问题,,所以这里就需要用到本地存储,以前的版本都是用cookie,但是不得不说cookie太小了,只有可怜的4k,而机房的网有时候实在是让人捉急,所以,考虑换一种方案. 直接读取XML实现方式 因为本地存储平时接触的不是太多,开始想的只是简单的读取本地的XML,做起来倒是挺容易的,一个语句就能搞定: <script language="javascri