-
Notifications
You must be signed in to change notification settings - Fork 135
Open
Description
I did some research and found out that there is another way to store data on the client side.
We don't want to use localStorage because it contains the private key, but what about indexedDB?
It takes much more code to use it but I tried to make a small code example for people to use:
The 2 functions can be used to load and save one object to the database, inside the object you can put whatever you want (i think). But there is of course a size limit on how much you can store in the DB. The indexedDBName should be different for each plugin.
var indexedDBName = "pluginNameDB";
function loadDataFromIndexedDB() {
let resolve, reject; let promise = new Promise((res, rej) => { resolve=res; reject=rej; });
const dbOpen = window.indexedDB.open(indexedDBName, 1);
dbOpen.onupgradeneeded = (ev) => {
const db = ev.target.result;
const store = db.createObjectStore("ObjStore", { keyPath: "id", autoIncrement: true, });
store.createIndex("Idx", "Idx", { unique: false });
};
dbOpen.onsuccess = (ev) => {
const db = ev.target.result;
const store = db.transaction("ObjStore", "readonly").objectStore("ObjStore");
const query = store.get(1);
query.onerror = (ev) => {
console.error(indexedDBName+" indexedDB query error", ev.target.error.message);
reject(ev.target.error.message);
};
query.onsuccess = (ev) => {
db.close();
if (query.result) {
resolve(query.result.Idx);
} else {
resolve(null);
}
};
};
return promise;
}
function writeDataToIndexedDB(data) {
let resolve, reject; let promise = new Promise((res, rej) => { resolve=res; reject=rej; });
const dbOpen = window.indexedDB.open(indexedDBName, 1);
dbOpen.onupgradeneeded = (ev) => {
const db = ev.target.result;
const store = db.createObjectStore("ObjStore", { keyPath: "id", autoIncrement: true, });
store.createIndex("Idx", "Idx", { unique: false });
};
dbOpen.onsuccess = (ev) => {
const db = ev.target.result;
const transaction = db.transaction("ObjStore", "readwrite");
const store = transaction.objectStore("ObjStore");
store.put({ id: 1, Idx: data });
transaction.onerror = (ev) => {
console.error(indexedDBName+" indexedDB transaction error", ev.target.error.message);
reject(ev.target.error.message);
};
transaction.oncomplete = (ev) => {
db.close();
resolve();
};
};
return promise;
}
What do you think? Can this be used?
Metadata
Metadata
Assignees
Labels
No labels