有一天你会知道,人生没有我并不会不同
存储在IndexedDB里的数据是永久保存,不像cookies那样只是临时的。IndexedDB里提供了查询数据的功能,在online和offline模式下都能使用。你可以用IndexedDB存储大型数据。
### IndexedDB 具有以下特点。
(1)键值对储存。 IndexedDB 内部采用对象仓库(object store)存放数据。所有类型的数据都可以直接存入,包括 JavaScript 对象。在对象仓库中,数据以“键值对”的形式保存,每一个数据都有对应的键名,键名是独一无二的,不能有重复,否则会抛出一个错误。
(2)异步。 IndexedDB 操作时不会锁死浏览器,用户依然可以进行其他操作,这与 LocalStorage 形成对比,后者的操作是同步的。异步设计是为了防止大量数据的读写,拖慢网页的表现。
(3)支持事务。 IndexedDB 支持事务(transaction),这意味着一系列操作步骤之中,只要有一步失败,整个事务就都取消,数据库回到事务发生之前的状态,不存在只改写一部分数据的情况。
(4)同域限制 IndexedDB 也受到同域限制,每一个数据库对应创建该数据库的域名。来自不同域名的网页,只能访问自身域名下的数据库,而不能访问其他域名下的数据库。
(5)储存空间大 IndexedDB 的储存空间比 LocalStorage 大得多,一般来说不少于250MB。IE的储存上限是250MB,Chrome和Opera是剩余空间的某个百分比,Firefox 则没有上限。
(6)支持二进制储存。 IndexedDB 不仅可以储存字符串,还可以储存二进制数据。
API实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| <script> if('indexedDB' in window) {
let openRequest = indexedDB.open("yangzie",5); let db; openRequest.onupgradeneeded = function(e) { console.log("数据库更新..."); db = e.target.result;
if (!db.objectStoreNames.contains('firstOS')){ db.createObjectStore("firstOS"); } else { console.log('表已经存在'); } };
openRequest.onsuccess = function(e) { console.log("数据路打开成功!");
db = e.target.result;
let transaction = db.transaction(["firstOS"], "readwrite");
let store = transaction.objectStore("firstOS");
let o = {p: "she is a girl"};
let request = store.add(o,2);
request.onerror = function(e) { console.log("数据添加失败!"); };
request.onsuccess = function(e) { console.log("数据添加成功!"); };
let tr = db.transaction(["firstOS"], "readwrite");
let storess = tr.objectStore("firstOS"); let p = { p:456 }; let urequest = storess.put(p, 1);
urequest.onerror = function () { console.log("修改成功"); };
urequest.onsucces = function () { console.log("修改失败"); };
let t = db.transaction(["firstOS"], "readonly"); let stores = t.objectStore("firstOS");
let ob = stores.get(1);
ob.onsuccess = function(e) { console.log("获取数据成功"); console.log(ob); };
transaction.oncomplete = function(event) { console.log('事务结束'); };
let tt = db.transaction(["firstOS"], "readwrite"); let mrequest = tt.objectStore("firstOS").delete(1);
mrequest.onsuccess = function () { console.log('删除成功'); };
mrequest.onerror = function () { console.log('删除失败'); }; };
openRequest.onerror = function(e) { console.log("数据库打开错误"); }; } else { console.log('您的浏览器不支持') }
</script>
|
http://javascript.ruanyifeng.com/bom/indexeddb.html