当我试图在IndexedDB的Chrome的非对应的斑点,我发现我可以作为arraybuffer通过AJAX读取图像,将其存储在索引资料,提取它,将其转换为一个blob,然后使用显示它在一个元素来创建一个解决方法以下代码:
var xhr = new XMLHttpRequest(),newphoto;
xhr.open("GET", "photo1.jpg", true);
xhr.responseType = "arraybuffer";
xhr.addEventListener("load", function () {
if (xhr.status === 200) {
newphoto = xhr.response;
/* store "newphoto" in IndexedDB */
...
}
}
document.getElementById("show_image").onclick=function() {
var store = db.transaction("files", "readonly").objectStore("files").get("image1");
store.onsuccess = function() {
var URL = window.URL || window.webkitURL;
var oMyBlob = new Blob([store.result.image], { "type" : "image\/jpg" });
var docURL = URL.createObjectURL(oMyBlob);
var elImage = document.getElementById("photo");
elImage.setAttribute("src", docURL);
URL.revokeObjectURL(docURL);
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常.但是,如果我尝试相同的过程,但这次装载的视频(.MP4)我不能表现出来:
...
var oMyBlob = new Blob([store.result.image], …
Run Code Online (Sandbox Code Playgroud) 有没有办法检查IndexedDB数据库是否已经存在?当程序尝试打开不存在的数据库时,将创建数据库.我能想到的唯一方法是如下所示,我测试objectStore是否已经存在,如果没有,则删除数据库:
var dbexists=false;
var request = window.indexedDB.open("TestDatabase");
request.onupgradeneeded = function(e) {
db = e.target.result;
if (!db.objectStoreNames.contains('todo')) {
db.close();
indexedDB.deleteDatabase("TestDatabase");
} else {
dbexists=true;
}
}
Run Code Online (Sandbox Code Playgroud)