Мы используем indexeddb для реализации фоновой синхронизации с сервисным работником.
Он работает нормально на всех системах, однако периодически он не может добавлять изображения в indexeddb, не получая сообщений об ошибках, только с предупреждением, что "данные могут быть устаревшими ".Ниже приведен пример кода.
Проблема была воспроизведена на мобильном браузере Chrome версии 66
function storetoIndexeddb(id, file) {
var docID = ''
docID = $scope[id]
var file = file;
var file64 = null;
// IndexedDB
var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.OIndexedDB || window.msIndexedDB,
IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.OIDBTransaction || window.msIDBTransaction,
dbVersion = 1;
var dbName = "testDb",
db;
if (!indexedDB) {
alert("Your browser doesn't support a stable version of IndexedDB. Such and such feature will not be available.");
}
// Create/open database
var request = indexedDB.open(dbName, dbVersion);
request.onerror = function(event) {
console.log("Error creating/accessing IndexedDB database");
};
request.onsuccess = function(event) {
console.log("Success creating/accessing IndexedDB database");
db = event.target.result;
db.onerror = function(event) {
console.log("Error creating/accessing IndexedDB database");
};
// Interim solution for Google Chrome to create an objectStore. Will be deprecated
if (db.setVersion) {
if (db.version != dbVersion) {
var setVersion = db.setVersion(dbVersion);
setVersion.onsuccess = function() {
createObjectStore(db);
putScreenshotInDb();
};
} else {
putScreenshotInDb();
}
} else {
putScreenshotInDb();
}
};
request.onupgradeneeded = function(event) {
createObjectStore(event.target.result);
};
function createObjectStore(dataBase) {
dataBase.createObjectStore("saveData");
}
function putScreenshotInDb() {
var request = indexedDB.open(dbName, dbVersion);
request.onerror = function(event) {
console.log("Error creating/accessing IndexedDB database");
};
request.onsuccess = function(event) {
console.log("Success creating/accessing IndexedDB database");
db = event.target.result;
db.onerror = function(event) {
console.log("Error creating/accessing IndexedDB database");
};
// Interim solution for Google Chrome to create an objectStore. Will be deprecated
transaction = db.transaction(["saveData"], "readwrite");
transaction.oncomplete = function(event) {
console.log('complete', event)
};
transaction.onerror = function(event) {
console.log('erooor', event)
};
var putreq = transaction.objectStore("saveData")
putreq.put(file, $routeParams.serviceRequestId + 'XXX' + $scope.inspectData.assetId + "XXX" + docID + 'XXXinspImage');
$scope.imageStorageRef[id].uploaded = true;
$scope.loading = false;
};
}
}