オブジェクト ストアだけではなく、IndexedDB データベース全体を JavaScript から削除するにはどうすればよいでしょうか? WebSQL をバックエンドとして使用する場合があるIndexedDB shimを使用しています。
Chrome、Safari (iPad)、IE10 は他の重要なブラウザーですが、主に PhantomJS (ヘッドレス) ブラウザーでこれを行う方法を知りたいです。
オブジェクト ストアだけではなく、IndexedDB データベース全体を JavaScript から削除するにはどうすればよいでしょうか? WebSQL をバックエンドとして使用する場合があるIndexedDB shimを使用しています。
Chrome、Safari (iPad)、IE10 は他の重要なブラウザーですが、主に PhantomJS (ヘッドレス) ブラウザーでこれを行う方法を知りたいです。
次のコードは正常に機能することがわかりましたが、Chrome リソース タブで DB が削除されたことを確認するには、ページを更新する必要がありました。また、トランザクションの実行中に Chrome デバッグ ツールを実行すると問題が発生することもわかりました。デバッグが難しくなりますが、コードの実行中に閉じると、コードは正常に動作するようです。ページを開くときにオブジェクト ストアへの参照を設定することも重要です。明らかに、コードの削除部分は deleteTheDB メソッドにあります。
Pluralsight で Craig Shoemaker によって提供された例から派生したコード。
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.");
};
};
}
}