这是一篇由 Parashuram Narasimhan 撰写的客座文章,介绍了如何使用当今的 IndexedDB。
使用本文中提到的填充,Web 开发人员可以开始在他们的应用程序中使用 IndexedDB API,并支持更广泛的浏览器。
的 IndexedDB API 已发展成为一项稳定的规范,并得到了主要浏览器供应商的支持。但是,该规范仍然 并非所有浏览器都支持,这使得在生产环境中使用它变得更加困难。支持该规范的浏览器之间在实现上也存在一些有趣的差异。本文探讨了几个可以用来使开发人员能够跨不同浏览器使用 IndexedDB 的填充。
使用 WebSql 的填充
WebSql 是浏览器中第一个数据存储规范之一,并得到一些不支持 IndexedDB 实现的浏览器的支持。但是,该规范不再处于主动维护状态。如文档中所述:“它曾经在 W3C 建议跟踪中,但规范工作已停止。该规范陷入了僵局:所有感兴趣的实现者都使用了相同的 SQL 后端(Sqlite),但我们需要多个独立的实现才能沿标准化路径进行。”
这个 使用 WebSql 的填充 利用 WebSQL 实现来公开 IndexedDB API。要使用填充,只需链接或包含 indexeddb.shim.js 文件。
填充将 window.indexedDB 赋值为 window.mozIndexedDB、window.webkitIndexedDB 或 window.msIndexedDB;如果其中任何一个实现可用。如果没有任何实现可用,填充会将“window.shimIndexedDB” 赋值给 window.indexedDB。因此,Web 应用程序可以将 window.indexedDB 作为所有数据库操作的起点。在内部,填充使用 WebSql 表来存储对象存储数据,并且大量借鉴了 Firefox 中的 IndexedDB 实现。例如,它有单独的表和数据库来维护数据库版本的记录,或者对象存储定义 (IDBObjectStoreParameters) 的值。有关内部的更多实现细节,请参阅 关于它的博客文章。
该填充经过测试,可与各种 IndexedDB 库配合使用,例如 PouchDB、LINQ2IndexedDB、JQuery-IndexedDB 和 DB.JS。由于它利用了 WebSql,因此应用程序可以在 Opera 和 Safari 等 Web 浏览器上,以及在 iPad/iPhone 上的 Safari 等移动浏览器或 Cordova 等支持 WebSql 的嵌入式浏览器的移动开发平台上编写符合 IndexedDB API 的代码。
它是在 Javascript 中实现的,并且正在开发中。请注意,它可能无法完全符合规范,如果您发现问题,您可以 提交错误报告 或向 源代码库 发送拉取请求。
用于 setVersion 的填充
IndexedDB 规范的早期版本使用“setVersion”调用来更改 IndexedDB 数据库的版本。后来,它被修改为更易于使用的“onupgradeneeded”回调。尽管 Internet Explorer 和 Firefox 支持较新的“onupgradeneeded”来启动用于创建或删除 objectStores 和索引的数据库版本更改,但 Google Chrome (22.0.1194.0 canary) 仍然使用较旧的 setVersion。
所有浏览器都将很快使用较新的“onupgradeneeded”方法;在此之前,这个简单的 用于 setVersion 的填充 使您能够使用 IndexedDB API 和 onupgradeneeded 方法。
填充使用 openReqShim() 调用替换 indexeddb.open() 调用。openReqShim() 调用会调用 setVersion(),然后将其转换为“onupgradeneeded”回调(如果只支持“setVersion()”)。如果实现支持“onupgradeneeded”,则 openReqShim() 只是对 indexeddb.open 方法的透明调用。因此,要使用此填充,应将 indexeddb.open() 调用替换为 openReqShim() 调用。
关于 Parashuram Narasimhan
Parashuram Narasimhan 是 Sneekpeeq 的程序员。在 Sneekpeeq 之前,他是微软 SQLCE 的高级项目经理,负责 IndexedDB 的实现和规范。他编写了 Jquery IndexedDB 插件(用于 IndexedDB 的查询层),并且正在开发用于 IndexedDB 的 WebSql 填充。他还喜欢在 Web 中玩弄最新的 HTML 功能及其安全影响。在空闲时间,他在 http://nparashuram.com/projects 上进行黑客攻击,并在 http://blog.nparashuram 上发布结果。他也是 Mozilla Firefox 的“狂热”粉丝,从版本 1 开始就一直使用它作为他的主要浏览器。
8 条评论