我想知道是否有一个库或项目,可以根据用户浏览器的支持情况,提供通用的IndexedDB或WebSQL接口。如果使用Chrome/Safari,则使用WebSQL;如果使用Firefox或Internet Explorer,则使用IndexedDB。
这个问题的发帖人似乎自己开发了一个解决方案,但没有提供任何源代码。这里是问题链接。
我想知道是否有一个库或项目,可以根据用户浏览器的支持情况,提供通用的IndexedDB或WebSQL接口。如果使用Chrome/Safari,则使用WebSQL;如果使用Firefox或Internet Explorer,则使用IndexedDB。
这个问题的发帖人似乎自己开发了一个解决方案,但没有提供任何源代码。这里是问题链接。
JasonCasden在他的演示文稿“浏览器储存和我”中分享了一个巨大的库/包装列表。以下是该列表:
lawnchair
persistence.js
persistJS
amplify.store
localStorageDB
https://github.com/axemclion/IndexedDB
realStorage
YUI3 CacheOffline
dojox.storage
DomSQL
Impel
ActiveJS ActiveRecord
JazzRecord
picnet.data.DataManager
ShinyCar
lscache
Kizzy
Artemia
microcache.js
Store.js
创建美观易用的 API,用于安全、强大、高性能和大规模的 Web 应用程序。
将最新的压缩 JS 脚本(请参见下载部分)导入到您的 HTML 文件中。这将在全局作用域中创建一个对象,调用 ydn.db.Storage。
var db = new ydn.db.Storage('db name');
db.setItem('x', 'some value')
db.getItem('x').success(function(value) {
console.log('x = ' + value);
}
使用查询计算平均值
q = db.query('customer').average('age');
avg = q.fetch()
q = db.query('customer', 'age').bound(18, 25, true).where('sex', '=', 'FEMALE').select('full_name')
young_girl_names = q.fetch()
p1 = db.key('player', 1);
db.transaction(function() {
p1.get().success(function(p1_obj) {
p1_obj.health += 10;
p1.put(p123_obj);
});
}, [p1]);
可以选择使用SHA-1密码对字符串值数据进行加密。
db = new ydn.db.Store('store name')
db.setSecret(passphase); // generally send from server side upon login
db.setItem(key, value, 3600*1000); // data expire on one hour
db.getItem(key); // data will be decrypted using the provided passphase
var todoDB = new TodoDatabase({
provider: 'webSql', databaseName: 'MyTodoDatabase' });
var todoDB = new TodoDatabase({
provider: 'indexedDB', databaseName: 'MyTodoDatabase' });
//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是由我亲自维护的 :)。