1. 程式人生 > >關於前端儲存 indexedDB

關於前端儲存 indexedDB

在寫手機端的時候經常會遇到一些奇葩的要求,比如客戶端禁止了cookies,前端快取還生效嗎?

之前在公司是用cookies localstorage sessionstorage測試過,禁止cookies是行不通的,今天再測試indexedDB,還是行不通的。

答案是大寫的:NO

那麼就用全域性變數存吧,全域性變數存在的問題就是重新整理瀏覽器變數會還原初始設定。

下面貼上indexedDB的程式碼。

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />

<meta name="apple-mobile-web-app-capable" content="yes" />

<meta name="author" content="sina_mobile">

<meta name="format-detection" content="telephone=no" />

<title></title>

</head>

<body>

<script>

var INDEXDB = {

indexedDB:window.indexedDB||window.webkitindexedDB,

IDBKeyRange:window.IDBKeyRange || window.webkitIDBKeyRange,//鍵範圍

openDB:function(dbname,dbversion,callback){

//建立或開啟資料庫,建立物件儲存空間(ObjectStore)

var self = this;

var version = dbversion || 1;

var request = self.indexedDB.open(dbname,version);

request.onerror = function(e){

console.log(e.currentTarget.error.message);

};

request.onsuccess = function(e){

myDB.db = e.target.result;

console.log('成功建立並開啟資料庫:'+myDB.name+' version'+dbversion);

};

request.onupgradeneeded=function(e){

var db=e.target.result,transaction= e.target.transaction,store;

if(!db.objectStoreNames.contains(myDB.ojstore.name)){

//沒有該物件空間時建立該物件空間

store = db.createObjectStore(myDB.ojstore.name,{keyPath:myDB.ojstore.keypath});

console.log('成功建立物件儲存空間:'+myDB.ojstore.name);

}

}

},

deletedb:function(dbname){

//刪除資料庫

var self = this;

self.indexedDB.deleteDatabase(dbname);

console.log(dbname+'資料庫已刪除')

},

closeDB:function(db){

//關閉資料庫

db.close();

console.log('資料庫已關閉')

},

addData:function(db,storename,data){

//新增資料,重複新增會報錯

console.log(db + ' 新增資料,重複新增會報錯')

var store = store = db.transaction(storename,'readwrite').objectStore(storename),request;

for(var i = 0 ; i < data.length;i++){

request = store.add(data[i]);

request.onerror = function(){

console.error('add新增資料庫中已有該資料')

};

request.onsuccess = function(){

console.log('add新增資料已存入資料庫')

};

}

},

putData:function(db,storename,data){

//新增資料,重複新增會更新原有資料

var store = store = db.transaction(storename,'readwrite').objectStore(storename),request;

for(var i = 0 ; i < data.length;i++){

request = store.put(data[i]);

request.onerror = function(){

console.error('put新增資料庫中已有該資料')

};

request.onsuccess = function(){

console.log('put新增資料已存入資料庫')

};

}

},

getDataByKey:function(db,storename,key){

//根據儲存空間的鍵找到對應資料

var store = db.transaction(storename,'readwrite').objectStore(storename);

var request = store.get(key);

request.onerror = function(){

console.error('getDataByKey error');

};

request.onsuccess = function(e){

var result = e.target.result;

console.log('查詢資料成功')

console.log(result);

};

},

deleteData:function(db,storename,key){

//刪除某一條記錄

var store = store = db.transaction(storename,'readwrite').objectStore(storename);

store.delete(key)

console.log('已刪除儲存空間'+storename+'中'+key+'記錄');

},

clearData:function(db,storename){

//刪除儲存空間全部記錄

var store = db.transaction(storename,'readwrite').objectStore(storename);

store.clear();

console.log('已刪除儲存空間'+storename+'全部記錄');

}

}

var students=[{

id:1001,

name:"Byron",

age:24

},{

id:1002,

name:"Frank",

age:30

},{

id:1003,

name:"Aaron",

age:26

}];

var myDB={

name:'uni',

version:1,

db:null,

ojstore:{

name:'students',//儲存空間表的名字

keypath:'id'//主鍵

}

};

INDEXDB.openDB(myDB.name,myDB.version);

setTimeout(function(){

console.log('****************新增資料****************************');

INDEXDB.addData(myDB.db,myDB.ojstore.name,students);

// console.log('******************add重複新增**************************');

// INDEXDB.addData(myDB.db,myDB.ojstore.name,students);

// console.log('*******************put重複新增*************************');

// INDEXDB.putData(myDB.db,myDB.ojstore.name,students);

// console.log('*******************獲取資料1001*************************');

// INDEXDB.getDataByKey(myDB.db,myDB.ojstore.name,1001);

// console.log('******************刪除資料1001************');

// INDEXDB.deleteData(myDB.db,myDB.ojstore.name,1001);

// console.log('******************刪除全部資料************');

// INDEXDB.clearData(myDB.db,myDB.ojstore.name);

// console.log('******************關閉資料庫************');

// INDEXDB.closeDB(myDB.db);

// console.log('******************刪除資料庫************');

// INDEXDB.deletedb(myDB.name);

},800)

</script>

</body>

</html>