2

我正在使用 Ionic 框架构建一个 Cordova 应用程序。我使用angular-localForage作为应用程序持久存储的本地数据库。

在开发过程中,我在 Windows 10 上使用 Google Chrome 45.0.2454.85 m 测试我的应用程序。angular-localForage 版本为 1.2.3,localForage 版本为 1.2.4。

我可以设置和检索数据没有问题。要设置我正在使用的数据:

$localForage.setItem(myKey, myData).then(myCallbackFunction);

根据docs,localForage 应该使用 IndexedDB 如果它可用,并在它不可用的浏览器中回退到 WebSQL。通过查看 Chrome 开发人员工具中的资源,我可以看到它将我的数据存储在 WebSQL 中。

如果我将此代码放在我的控制器中,我会收到一条消息说 IndexedDB 可用:

if (!window.indexedDB) {
    window.alert("Your browser doesn't support a stable version of IndexedDB. Such and such feature will not be available.");
} else {
    window.alert("IndexedDB available.");
}

我的问题是,当我有 IndexedDB 可用时,为什么它在 Chrome 中使用 WebSQL?

4

2 回答 2

5

这个问题实际上是相当偷偷摸摸的。

TLDR;Apple 的 UIWebView 不支持 indexedDB。关闭 Chrome 的 iOS 模拟器以查看 indexedDB 是否正常工作。

发生的事情是,我假设您正在使用 Chrome 开发工具模拟 iPhone。好吧,这种欺骗实际上非常有效,因为localForage如果您将其配置为专门使用 indexedDB,现在会发出错误。

如果你想有一个深刻的厌倦时刻并看到 indexedDB 的运行...关闭仿真,以便你使用 Chrome 自己的用户代理。那它会起作用的。

资料来源:我必须自己处理这些废话。这是一个非常糟糕的开发者体验。哈哈。

于 2015-11-03T16:23:26.313 回答
0

我的猜测是 websql 被视为首选,因为它的存在时间比 indexeddb api 长,并且 chrome 比 indexeddb 更早地推送 websql。由于 chrome 仍然支持 websql,因此在 indexeddb 之前需要 websql。

于 2015-09-10T08:37:42.200 回答