IndexedDB是一个功能强大且高度灵活的存储系统,您可以使用它来存储您希望存储在用户浏览器中的任何数据。然而,其出色的特性和灵活性使其API不如网络存储友好。你还会发现移动浏览器对IndexedDB不是很友好,即使它们支持它。IndexedDBKeyTerms数据库IndexedDB的最上层是数据库的概念。对象存储对象存储相当于一个存储数据的桶。如果您使用过传统的关系数据库,您可以将对象存储视为一张表。但IndexedDB可以更灵活地存储数据。索引索引是一种从对象存储中检索数据的方法。使用数据库创建数据库时,需要提供名称和版本。数据库结构(指对象存储和索引,不是实际数据本身)只能在更改版本时临时调整。在IndexDB中,您所做的一切都是异步的。所以,打开数据库并不意味着马上就可以使用,而是要响应一个事件后才能使用。打开数据库的操作可以触发的事件有success、error、upgradeneeded、blocked。其中upgradeneeded在用户第一次访问数据库或者版本号发生变化时触发。这是设置数据结构的地方。bloced在数据库不可用或不可用时触发。functionidbOK(){在窗口中返回“indexedDB”;}$(documengt).ready(function(){if(!idbOK)return;varopenRequest=indexedDB.open("ora_idb1",1);openRequest.onsuccess=function(e){vardb=e.target.result;}});上面代码中,首先检查浏览器是否支持IndexedDB。如果支持,则使用indexedDB.open方法打开数据库。第一个参数是数据库名称。由于一个IndexedDB数据库只为一个网站提供,不用担心与其他数据库名称冲突。使用对象存储如前所述,indexedDB对象存储有点像SQL数据库表。它应该只包含一种“类型”的数据,例如“人”、“笔记”或其他对象的实例。这个想法是每个需要持久化的数据类型都有一个对象存储。对象存储只能在upgradeneeded事件处理期间创建。假设您设计了一个支持两种类型的对象存储的数据库。在数据之后,您决定存放第三种类型的数据。你需要做两件事:第一,改变版本号;其次,编写代码来添加一个新的对象存储。创建对象存储要创建对象存储,您应该首先检查它是否存在。可以使用数据库变量(从打开数据库操作的事件处理程序获得)访问objectStoreNames属性。该属性是一个DOMStringList实例,您可以检查它是否已经包含一个值。如果没有,您可以调用createObjectStore("name",options)方法来创建对象存储。openRequest.onupgradeneeded=function(e){varthisDB=e.target.result;if(!thisDB.objectStoreNames.contains("firstOS")){thisDB.createObjectStore("firstOS");}}定义对象存储中的主键,每条数据都必须有一种方法来唯一标识自己。在定义对象存储时,您定义了数据的唯一标识方式。实际上,主要有两种定义方式。一是定义一个keypath,它本质上是一个永久存在的属性,包含唯一的信息。另一种是使用密钥生成器,这本质上是一种生成唯一值的方法。
