我如何从JavaScript中删除整个IndexedDB数据库
How can I remove a whole IndexedDB database from JavaScript?
如何从JavaScript中删除整个IndexedDB数据库,而不仅仅是一个对象存储?我正在使用IndexedDB shim,它可能使用WebSQL作为其后端。
我主要想知道如何为PhantomJS(无头)浏览器做到这一点,虽然Chrome, Safari(在iPad上)和IE10是其他重要的浏览器。
据我所知,应该使用indexedDB.deleteDatabase:
var req = indexedDB.deleteDatabase(databaseName);
req.onsuccess = function () {
console.log("Deleted database successfully");
};
req.onerror = function () {
console.log("Couldn't delete database");
};
req.onblocked = function () {
console.log("Couldn't delete database due to the operation being blocked");
};
我可以确认它适用于PhantomJS 1.9.0和Chrome 26.0.1410.43
我发现下面的代码工作正常,但要看到在Chrome资源选项卡中删除的DB,我必须刷新页面。此外,我发现我在做交易时运行的Chrome调试工具有问题。使它更难调试,但如果你关闭它,而运行代码的代码似乎工作正常。重要的是在打开页面时设置对对象存储的引用。显然,代码的删除部分是在deleteTheDB方法中。
代码源自Craig Shoemaker在Pluralsight上提供的示例。
var IndDb = {
name: 'SiteVisitInsp',
version: 1000,
instance: {},
storenames: {
inspRecords: 'inspRecords',
images: 'images'
},
defaultErrorHandler: function (e) {
WriteOutText("Error found : " + e);
},
setDefaultErrorHandler: function (request) {
if ('onerror' in request) {
request.onerror = db.defaultErrorHandler;
}
if ('onblocked' in request) {
request.onblocked = db.defaultErrorHandler;
}
}
};
var dt = new Date();
var oneInspRecord =
{
recordId: 0,
dateCreated: dt,
dateOfInsp: dt,
weatherId: 0,
timeArrived: '',
timeDeparted: '',
projectId: 0,
contractorName: '',
DIWConsultant: '',
SiteForeman: '',
NoOfStaffOnSite: 0,
FileME: '',
ObservationNotes: '',
DiscussionNotes: '',
MachineryEquipment: '',
Materials: ''
};
var oneImage =
{
recordId: '',
imgSequence: 0,
imageStr: '',
dateCreated: dt
}
var SVInsp = {
nameOfDBStore: function () { alert("Indexed DB Store name : " + IndDb.name); },
createDB: function () {
openRequest = window.indexedDB.open(IndDb.name, IndDb.version);
openRequest.onupgradeneeded = function (e) {
var newVersion = e.target.result;
if (!newVersion.objectStoreNames.contains(IndDb.storenames.inspRecords)) {
newVersion.createObjectStore(IndDb.storenames.inspRecords,
{
autoIncrement: true
});
}
if (!newVersion.objectStoreNames.contains(IndDb.storenames.images)) {
newVersion.createObjectStore(IndDb.storenames.images,
{
autoIncrement: true
});
}
};
openRequest.onerror = openRequest.onblocked = 'Error'; //resultText;
openRequest.onsuccess = function (e) {
//WriteOutText("Database open");
IndDb.instance = e.target.result;
};
},
deleteTheDB: function () {
if (typeof IndDb.instance !== 'undefined') {
//WriteOutText("Closing the DB");
IndDb.instance.close();
var deleteRequest = indexedDB.deleteDatabase(IndDb.name)
deleteRequest.onblocked = function () {
console.log("Delete blocked.");
}
deleteRequest.onerror =
function () {
console.log("Error deleting the DB");
//alert("Error deleting the DB");
};
//"Error deleting the DB";
deleteRequest.onsuccess = function () {
console.log("Deleted OK.");
alert("*** NOTE : Requires page refresh to see the DB removed from the Resources IndexedDB tab in Chrome.");
//WriteOutText("Database deleted.");
};
};
}
}
相关文章:
- indexedDB创建数据库并添加内容执行失败'交易'在'IDBDatabase'
- 错误“由于与数据库无关的原因,操作失败..“,在 Firefox 中使用 indexedDB 时
- 将SQLite数据库存储在IndexedDB中
- 如何重命名IndexedDB数据库
- 返回 indexedDB 数据库对象存储中的所有值
- IndexedDB - 对象存储 vs 多个数据库 vs 索引
- indexedDB 无法在“onupgradeneed”事件中插入数据库中的数据
- 打开和关闭 IndexedDB 数据库连接的频率
- IndexedDB数据库身份验证-安全选项-加密/哈希JavaScript HTML5
- 本地IndexedDB安全性(数据库名称唯一性)
- 当用户试图删除indexedDB数据库时,是否有方法执行函数
- 检查IndexedDB数据库是否存在
- 将IndexedDB数据库中的数据放入变量中
- IndexedDB没有保存在数据库中
- 在同一域的两个不同的离线web应用程序中创建/访问indexedDB使用相同的数据库
- 如何从IndexedDB数据库中的多个表计算总销售额
- 如何删除IndexedDB旧版本的数据库由js
- 我如何从JavaScript中删除整个IndexedDB数据库
- 错误"试图在不允许突变的数据库上进行突变操作."在indexedDB中检索数据时
- 可以't在IE10中创建IndexedDB数据库