javascript - registro - indexeddb search
¿Cómo puedo eliminar una base de datos IndexedDB entera de JavaScript? (2)
¿Cómo se puede eliminar una base de datos IndexedDB completa de JavaScript, en lugar de simplemente un almacén de objetos? Estoy usando el shim IndexedDB , que puede usar WebSQL como su back-end.
Principalmente me gustaría saber cómo hacer esto para el navegador PhantomJS (sin cabeza), aunque Chrome, Safari (en iPad) e IE10 son otros navegadores importantes.
Descubrí que el siguiente código funciona bien, pero para ver la base de datos eliminada en la pestaña de recursos de Chrome tuve que actualizar la página. También descubrí que tenía problemas con las herramientas de depuración de Chrome que se ejecutaban mientras hacía transacciones. Hace que sea más difícil depurarlo, pero si lo cierra mientras ejecuta el código, el código parece funcionar bien. También es importante establecer una referencia al almacén de objetos al abrir la página. Obviamente, la parte eliminada del código está en el método deleteTheDB.
Código derivado del ejemplo proporcionado por Craig Shoemaker en 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.");
};
};
}
}
Por lo que puedo decir, uno debe usar 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");
};
Puedo confirmar que funciona con PhantomJS 1.9.0 y Chrome 26.0.1410.43.