Я надеюсь, что вы (OP) довольны решениями, предложенными в ответе, который вы приняли.
Для тех, кто все еще ищет способное решение (группа, которая может включать или не включатьOP), ознакомьтесь с BakedGoods .
Это библиотека, которая устанавливает единый интерфейс, который можно использовать для выполнения операций хранения во всех собственных и некоторых не собственных клиентских хранилищах.Он также поддерживает гибкость и возможности, предоставляемые каждому пользователю.
При этом выполнение операций хранения в зависимости от того, какой тип базы данных поддерживается, зависит от ...
...указав соответствующие параметры операции и эквивалентные конфигурации для обоих типов баз данных:
//If the operation is a set(), and the referenced structures
//don't exist, they will be created automatically.
var webSQLOptionsObj = {
databaseName: "Example_DB",
databaseDisplayName: "Example DB",
databaseVersion: "",
estimatedDatabaseSize: 1024 * 1024,
tableData: {
name: "Main",
keyColumnName: "lastName",
columnDefinitions: "(lastName TEXT PRIMARY KEY, firstName TEXT)"
},
tableIndexDataArray: [name: "First_Name_Index", columnNames: "(firstName)"]
};
var indexedDBOptionsObj = {
databaseName: "Example_DB",
databaseVersion: 1,
objectStoreData: {
name: "Main",
keyPath: lastName,
autoIncrement: false
},
objectStoreIndexDataArray: [
{name: "First_Name_Index", keyPath: "firstName", unique: false, multiEntry: false}
],
};
var optionsObj = {
conductDisjointly: false,
webSQL: webSQLOptionsObj,
indexedDB: indexedDBOptionsObj
};
... и выполнив операцию:
bakedGoods.set({
data: [
{value: {lastName: "Obama", firstName: "Barack"}},
{value: {lastName: "Biden", firstName: "Joe"}}
],
storageTypes: ["indexedDB", "webSQL"],
options: optionsObj,
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
Его простой интерфейс и бесподобная поддержка хранилища происходит встоимость отсутствия поддержки для некоторых конфигураций хранилища.Например, он не поддерживает выполнение операций хранения в таблицах WebSQL с первичными ключами из нескольких столбцов.
Так что, если вы интенсивно используете эти типы функций, вы можете захотеть посмотреть в другом месте.
О, и ради полной прозрачности BakedGoods поддерживается вашими по-настоящему :).