Итак, есть две вещи, которые, похоже, доставляют вам неприятности.
1) В связи с вашей ошибкой Uncaught DOMException
сообщение означает, что при определении хранилища объектов вы указали keyPath
из id
, что означает, что вы используете встроенные ключи для этого хранилища. Это означает, что когда вы используете метод .put()
, вы не можете передать ключ как второй параметр этого метода, но вы должны поместить его в объект, который вы пытаетесь put
. Итак, сделайте ob.id = key
и затем просто передайте ob
в put
вызов.
2) Способ получения key
также может быть проблемой. Запрос .get()
является асинхронным вызовом, поэтому при разрешении .get()
будет происходить событие onsuccess
. Поэтому вам понадобится обработчик для извлечения ключа из успешного получения, и вы захотите реализовать свой вызов .put()
внутри него.
Я взял ваш код и изменил его, чтобы отразить оба упомянутых мной изменения:
var cv = document.getElementById('myCanvas');
let bits = cv.toDataURL("image/png");
let ob = {
created: new Date(),
data: bits
};
let trans = db.transaction([currentNotebook], 'readwrite');
let key = trans.objectStore(currentNotebook).get(getAllKeysRequest.result[currentPage]);
key.onsuccess = function() {
let _key = key.result;
ob.id = _key;
let editReq = trans.objectStore(currentNotebook).put(ob, key);
editReq.onerror = function (e) {
console.log('error storing data');
console.error(e);
}
}