IndexedDB demo showcase
var dbGlobals = new Object();
dbGlobals.db = null;
dbGlobals.description = "This database is used to store files locally.";
dbGlobals.name = "localFileStorage";
dbGlobals.version = 1;
dbGlobals.storeName = "fileObjects";
dbGlobals.message = "";
dbGlobals.empty = true; // --------------------------------------------------- function requiredFeaturesSupported() {
switch(window.location.protocol) {
case "http:":
break;
case "https:":
break;
case "ms-wwa-web":
break;
case "ms-wwa":
break;
default:
document.getElementById("bodyElement").innerHTML = "<h3>IndexedDB pages must be served via the http:// or https:// protocol - resolve this issue and try again.</h3>";
return false;
} // switch if(!document.getElementById("fileSelector").files) {
document.getElementById("bodyElement").innerHTML = "<h3>File API is not fully supported - upgrade your browser to the latest version.</h3>";
return false;
} if(!window.indexedDB) {
if(window.mozIndexedDB) {
window.indexedDB = widnow.mozIndexedDB;
}
else if(window.webkitIndexedDB) {
window.indexedDB = window.webkitIndexedDB;
IDBCursor = window.webkitIDBCursor;
IDBDatabaseException = window.webkitIDBDatabaseException;
IDBRequest = window.webkitIDBRequest;
IDBKeyRange = window.webkitIDBKeyRange;
IDBTransaction = window.webkitIDBTransaction;
}
else {
document.getElementById("bodyElement").innerHTML = "<h3>IndexedDB is not supported - upgrade your browser to the latest version.</h3>";
return false;
}
} // if if(!window.indexedDB.deleteDatabase) {
document.getElementById("bodyElement").innerHTML = "<h3>The required version of IndexedDB is not supported.</h3>";
return false;
}
return true;
} // requiredFeaturesSupported // -------------------------------------------------- if(requiredFeaturesSupported()) {
document.getElementById("openButton").addEventListener("click", openDB, false);
document.getElementById("populateButton").addEventListener("click", populateDB, false);
document.getElementById("displayButton").addEventListener("click", displayDB, false);
document.getElementById("deleteButton").addEventListener("click", deleteDB, false); document.getElementById("fileSelector").addEventListener("change", handleFileSelection, false);
} // if // ----------------------------------------- function openDB() {
console.log("------------------------openDB_onupgradeneeded()-----------------------");
displayMessage("<p>The database will be created/opened here...</p>"); if(!window.indexedDB.open) {
console.log("window.indexedDB.open is null in openDB()");
return;
} // if try {
var openRequest = window.indexedDB.open(dbGlobals.name, dbGlobals.version); // openRequest.onerror = function(evt) {console.log("openRequest.onerror fired in openDB() - error: " + (evt.target.error ? evt.target.error : evt.target.errorCode));};
openRequest.onblocked = openDB_onblocked;
openRequest.onupgradeneeded = openDB_onupgradeneeded;
openRequest.onsuccess = openDB_onsuccess;
}catch(ex) {
console.log("window.indexedDB.open exception in openDB() - " + ex.message);
}
} // openDB // -------------------------------------------------------------- function openDB_onblocked(evt) {
console.log("openDB_onblocked()"); var message = "<p>The database is blocked - error code: " + (evt.target.error ? evt.target.error : evt.target.errorCode) + "</p>";
message += "<p>If this page is open in other browser windows, close these windows.</p>"; displayMessage(message);
} // openDB_onblocked // -------------------------------------------- function openDB_onupgradeneeded(evt) {
console.log("openDB_onupgradeneeded()");
displayMessage("<p>Your request has been queued.</p>"); var db = dbGlobals.db = evt.currentTarget.result; // A successfully opened database results in a database object, which we place in our global IndexedDB variable. if(!db) {
console.log("db (i.e., evt.target.result) is null in openDB_onupgradeneeded()");
return;
} // if try {
db.createObjectStore(dbGlobals.storeName, {keyPath: "name"});
console.log("openDB_onupgradedneeded() success");
}
catch(ex) {
console.log("Exception is openDB_onupgradeneeded() - " + ex.message);
return;
} dbGlobals.message = "<p>The database has been created.</p>"; // A means of communicating this information to the openDB_onsuccess handler.
} // openDB_onupgradeneeded // ------------------------------------------------- function openDB_onsuccess(evt) {
console.log("openDB_onsuccess()");
displayMessage("<p>Your request has been queued.</p>"); var db = dbGlobals.db = evt.target.result; if(!db) {
console.log("db (i.e., evt.target.result) is null in openDB_onsuccess()");
return;
} // if dbGlobals.message += "<p>The database has been opened.</p>";
displayMessage(dbGlobals.message);
dbGlobals.message = "";
} // openDB_onsuccess // ---------------------------------------------- function populateDB() {
console.log("------------------------populateDB()--------------------------"); if(!dbGlobals.db) {
displayMessage("<p>The database hasn't been opened/created yet.</p>");
console.log("db (i.e., dbGlobals.db) is null in populateDB()");
return;
} document.getElementById("fileSelector").style.display = "block"; // Now that we have a valid database, allow the user to put file(s) in it. var message = "<p>Using the below <strong>Browse</strong> button, select one or more files to store in the database.</p>";
message += "<p>Then, click the <strong>Display DB<strong> button to display what's currently in the database.</p>";
displayMessage(message);
} // populateDB // ------------------------------------------------- function displayDB() {
console.log("------------------------displayDB()----------------------------"); var db = dbGlobals.db; if(!db) {
displayMessage("<p>There's no database to display.</p>");
console.log("db (i.e, dbGlobals.db) is null in displayDB()");
return;
} // if try{
var transaction = db.transaction(dbGlobals.storeName, (IDBTransaction.READ_ONLY ? IDBTransaction.READ_ONLY : "readonly"));
} // try
catch(ex) {
console.log("db.transaction() exception in displayDB() - " + ex.messsage);
return;
} // catch try{
var objectStore = transaction.objectStore(dbGlobals.storeName); try {
var cursorRequest = objectStore.openCursor(); cursorRequest.onerror = function(evt) {
console.log("cursorRequest.onerror fired in displayDB() - error code: " + (evt.target.error ? evt.target.error : evt.target.errorCode));
} var fileListHTML = "<p><strong>File(s) in database: </strong></p><ul style='margin: -0.5em 0 1em -1em;'>"; // Be aware that if the database is empty, this variable never gets used. cursorRequest.onsuccess = function(evt) {
console.log("cursorRequest.onsuccess fired in displayDB()"); var cursor = evt.target.result; if(cursor) {
dbGlobals.empty = false;
fileListHTML += "<li>" + cursor.value.name;
fileListHTML += "<p style='margin: 0 0 0 0.75em;'>" + cursor.value.name + "</p>";
fileListHTML += "<p style='margin: 0 0 0 0.75em;'>" + cursor.value.size + " bytes</p>";
cursor.continue();
}
else {
fileListHTML += "</ul>";
displayMessage(fileListHTML);
} if(dbGlobals.empty) {
displayMessage("<p>The database is empty – there's nothing to display.</p>");
}
}
} // inner try
catch(innerException) {
console.log("Inner try exception in displayDB() - " + innerException.message);
} // inner catch
} // outer try
catch(outerException) {
console.log("Outer try exception in displayDB() - " + outerException.message);
} // outer catch
} // displayDB // ------------------------------------------------- function deleteDB() {
console.log("------------------------deleteDB()-----------------------------");
displayMessage("<p>The database will be deleted here...</p>"); try{
if(dbGlobals.db) {
dbGlobals.db.close(); // If the database is open, you must first close the database connection before deleting it. Otherwise, the delete request waits (possibly forever) for the required close request to occur.
} var deleteRequest = window.indexedDB.deleteDatabase(dbGlobals.name); // Note that we already checked for the availability of the deleteDatabase() method in the above feature detection code.
deleteRequest.onsuccess = function() {
dbGlobals.db = null;
dbGlobals.empty = true;
dbGlobals.message = "";
displayMessage("<p>The database has been deleted.</p>");
console.log("delete success");
}; // deleteRequest.onsuccess
} // try
catch(ex) {
console.log("Exception in deleteDB() - " + ex.message);
} // catch
} // deleteDB // ------------------------------------------------- function handleFileSelection(evt) {
console.log("------------------------handleFileSelection()------------------------"); var files = evt.target.files; // The files selected by the uer (as a FileList object).
console.log(files);
if(!files) {
displayMessage("<p>At least one selected file is invalid - do not select any folders.</p><p>Please reselect and try again.</p>");
return;
} var db = dbGlobals.db;
if(!db) {
console.log("db (i.e., dbGlobals.db) is null in handleFileSelection()");
return;
} // if try{
var transaction = db.transaction(dbGlobals.storeName, (IDBTransaction.READ_WRITE ? IDBTransaction.READ_WRITE : "readwrite"));
} // try
catch(ex) {
console.log("db.transaction exception in handleFileTransaction() - " + ex.message);
return;
} // catch transaction.onerror = function(evt) {
console.log("transaction.onerror fired in handleFileSelection() - error code: " + (evt.target.error ? evt.target.error : evt.target.errorCode));
};
transaction.onabort = function() {
console.log("transaction.onabort fired in handleFileSelection()");
};
transaction.oncomplete = function() {
console.log("transaction.oncomplete fired in handleFileSelection()");
}; files = [
{
name: "sina.jpg",
size: 2813,
type: "text/html"
},
{
name: "indexedDB.html",
size: 808,
type: "text/html"
},
{
name: "m.html",
size: 0,
type: "text/html"
}
]; try {
var objectStore = transaction.objectStore(dbGlobals.storeName); for(var i = 0, file; file = files[i]; i++) {
var putRequest = objectStore.put(file);
putRequest.onsuccess = function() {dbGlobals.empty = false;};
putRequest.onerror = function(evt) {console.log("putRequest.onerror fired in handleFileSelection() - error code: " + (evt.target.error ? evt.target.error : evt.target.errorCode));};
} // for
} // try
catch(ex) {
console.log("Transaction and/or put() exception in handleFileSelection() - " + ex.message);
return;
} // catch document.getElementById("fileSelector").style.display = "none"; // The file(s) have already been selected so remove the "file picker" dialog box.
} // handleFileSelection // -------------------------------------------------- function displayMessage(message) {
document.getElementById("messages").innerHTML = message;
} // displayMessage // ------------------------------------------------------
http://www.huxiu.com/article/21008/1.html
IndexedDB demo showcase的更多相关文章
- Django Suit v2-dev 使用
转:链接:https://www.jianshu.com/p/84fa8219fb48 官方文档: 链接 Git: 链接 install Django Suit 为了适配 Django 有许多不同的版 ...
- 010. windows10下安装kivy 1.9.1版
Microsoft Windows [版本 10.0.14393] 以管理员权限打开cmd (c) 2016 Microsoft Corporation. 保留所有权利. 1. C:\Users\LG ...
- Kivy A to Z -- Kivy 示例演示自带名单
所有的样品已经在Android 4.04 手机正常进行 1.demo/kivycatalog 这个例子说明了如何使用主控件,例如Layout,Button,MediaPlayer,Progress B ...
- 95+强悍的jQuery图形效果插件
现在的网站越来越离不开图形,好的图像效果能让你的网站增色不少.通过JQuery图形效果插件可以很容易的给你的网站添加一些很酷的效果. 使用JQuery插件其实比想象的要容易很多,效果也超乎想象.在本文 ...
- indexedDB bootstrap angularjs 前端 MVC Demo
前端之MVC应用 1.indexedDB(Model): 数据层,前端浏览器 HTML5 API 面向对象数据库,一般现在用的数据库都是关系型数据库. 那么indexeddb有什么特点呢: 首先,从字 ...
- 通讯框架 T-io 学习——给初学者的Demo:ShowCase设计分析
前言 最近闲暇时间研究Springboot,正好需要用到即时通讯部分了,虽然springboot 有websocket,但是我还是看中了 t-io框架.看了部分源代码和示例,先把helloworld敲 ...
- js IndexedDB:浏览器端数据库的demo实例
IndexedDB具有以下特点. (1)键值对储存. IndexedDB内部采用对象仓库(object store)存放数据.所有类型的数据都可以直接存入,包括JavaScript对象.在对象仓库中, ...
- Web数据持久化存储IndexedDB(不常用)
IndexedDB是在浏览器中保存结构化数据的一种数据库,为了替换WebSQL(标准已废弃,但被广泛支持)而出现.IndexedDB使用NoSQL的形式来操作数据库,保存和读取是JavaScript对 ...
- HTML5 indexedDB数据库的入门学习(一)
笔者早些时间看过web sql database,但是不再维护和支持,所以最近初步学习了一下indexedDB数据库,首先indexedDB(简称IDB)和web sql database有很大的差别 ...
随机推荐
- mongodb 学习笔记 09 -- shard分片
概述 shard 分片 就是 把不同的数据分在不同的server 模型 当中: 用户对mongodb的操作都是向mongs请求的 configsvr 用于保存,某条数据保存在哪个sha ...
- Flume NG中的Netcat Source
NetCat是一个非常简单的Unix工具,可以读.写TCP或UDP网络连接(network connection)中数据 在Flume中的netcat支持Flume与NetCat整合,flume可以使 ...
- HTML5本地化应用开发-HTML5 Web存储详解
文章不是简单的的Ctrl C与V,而是一个字一个标点符号慢慢写出来的.我认为这才是是对读者的负责,本教程由技术爱好者成笑笑(博客:http://www.chengxiaoxiao.com/)写作完成. ...
- C# 序列化和反序列
1.对象序列化的介绍 (1).NET支持对象序列化的几种方式 二进制序列化:对象序列化之后是二进制形式的,通过BinaryFormatter类来实现的,这个类位于System.Runtime.Seri ...
- 转-C# 操作 Excel 常见问题收集和整理
经常会有项目需要把表格导出为 Excel 文件,或者是导入一份 Excel 来操作,那么如何在 C# 中操作 Excel 文件成了一个最基本的问题. 做开发这几年来,陆陆续续也接触过这样的需求,但因为 ...
- MVC 中的Areas支持
在ASP.NET MVC 2中对于Area功能的增强,这样的增强是如何在同一个项目中更好地组织应用程序的? ASP.NET MVC 1.0时,如果我们要在一个项目中做自己网站的后台应用,而又保持URL ...
- (转)ASP.NET QueryString乱码解决问题
正常的情况下,现在asp.net的网站很多都直接使用UTF8来进行页面编码的,这与Javascript.缺省网站的编码是相同的,但是也有相当一部分采用GB2312. 对于GB2312的网站如果直接用j ...
- 关于打开ILDASM的方法
1.通过VisualStudio在开始菜单下的Microsoft Visual Studio 2008/Visual Studio Tools/中的命令提示符中输入ildasm即可 2.将其添加至 ...
- Android 读取txt文件并以utf-8格式转换成字符串
博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 博客园: 追风917 # 使用EncodingUtils 今天用到了城市选择三级联动的库,用的这个:https://gi ...
- MongoDB的索引
一.索引详讲 索引是什么,索引就好比一本书的目录,当我们想找某一章节的时候,通过书籍的目录可以很快的找到,所以适当的加入索引可以提高我们查询的数据的速度. 准备工作,向MongoDB中插入20000条 ...