Znalazłem następujący kod działa OK, ale aby zobaczyć DB usunięte na karcie Zasoby Chrome musiałem odświeżyć stronę. Zauważyłem też, że miałem problemy z narzędziami do debugowania Chrome działającymi podczas wykonywania transakcji. Utrudnia to debugowanie, ale jeśli zamkniesz go podczas działania kodu, kod wydaje się działać poprawnie. Istotne jest również ustawienie odwołania do składnicy obiektów podczas otwierania strony. Oczywiście, usuń część kodu jest w metodzie deleteTheDB.
Kod wyprowadzony z przykładu dostarczonego przez Craiga Shoemakera na 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.");
};
};
}
}
Po prostu ciekawi. Dlaczego chcesz go usunąć? – hequ
@hequ Zautomatyzowane cele testowania. – aknuds1
możliwy duplikat [Jak usunąć indexedDB w Chrome] (http://stackoverflow.com/questions/9384128/how-to-delete-indexeddb-in-chrome) – Josh