为啥 WebSQL 不适用于使用 PhoneGap 制作的 iOS 应用程序?
Posted
技术标签:
【中文标题】为啥 WebSQL 不适用于使用 PhoneGap 制作的 iOS 应用程序?【英文标题】:Why does WebSQL not work with iOS applications made with PhoneGap?为什么 WebSQL 不适用于使用 PhoneGap 制作的 iOS 应用程序? 【发布时间】:2015-06-11 14:59:56 【问题描述】:我刚刚将我的 PhoneGap 应用程序移植到 ios 平台,我正在测试的 iPad(以及 xCode 提供的模拟器)似乎不想与 WebSQL 正常工作......
我想,我已经追查到了问题的根源。本质上,当我尝试打开/创建数据库时,应用程序只是挂起并且不会继续超过这一点......
这是我的代码片段...
var SQLAPI = function()
self.Init = function()
// DB Name, Verion Number, Text Description, Estimated Size of DB
var size = 1000 * 1024 * 1024;
if(IsMobile())
document.addEventListener("deviceready", function()
alert("Started Device Ready");
self.db = window.openDatabase("MyDB", "1.0", "My Database", size);
alert("Started Made DB");
alert("Started DB");
, false);
else
self.db = window.openDatabase("MyDB", "1.0", "My Database", size);
alert("started DB 2")
;
;
问题出在以下代码...
alert("Started Device Ready");
self.db = window.openDatabase("MyDB", "1.0", "My Database", size);
alert("Started Made DB");
alert("Started DB");
第一个提示“已启动设备就绪”的警报被触发,因此会出现一个提示框,显示该文本。
然后它尝试运行 window.openDatabase 并且此时发生了一些事情,因为它永远不会执行下一组警报......
该应用可在浏览器、android 设备等设备上运行...仅在 iOS 上会出现此问题。
【问题讨论】:
Web SQL 是一个废弃的标准,对它的支持可能已被删除。如果执行在该行停止,则应该有错误。将其包装在try..catch
中并检查引发的错误。
@JonathanLonowski 是的,但 iOS 是少数支持/支持它的少数之一。
【参考方案1】:
它可能无法在 iOS 上运行,因为您请求的数据库大小远远超过允许的限制:1000 * 1024 * 1024 == 1Gb
iOS WebView 中 WebSQL DB 的既定上限为 50Mb (see here]。
它可以在其他平台上运行,因为它们允许无限大小,或者如果请求的大小大于限制,它们会将其限制在该限制内。
尝试将 DB 的大小减小到 50Mb 以下,例如49*1024*1024
如果您需要容量比这更大的数据库,请考虑使用 this native SQLite plugin 之类的东西来替代具有无限存储容量的 WebSQL。
【讨论】:
目前从 WebSQL 更改为 Native SQLite 插件对我来说是不可行的......尽管如果有了正确的插件,我将来很想这样做......这个插件是否适用于Android和iOS,我在GitHub页面上看到了iOS的构建失败通知。 SQLite 插件肯定可以在 iOS 上运行,尽管有构建失败的通知。我将它与我写的 another plugin 结合使用 - 你可以亲眼看到 example project 在 iOS 上构建和运行良好 至于将 WebSQL 替换为原生 SQLite 的可行性,使用此插件时所做的更改是单行的,因为它旨在作为 WebSQL 的替代品 - 只需将window.openDatabase()
替换为 @ 987654326@和返回对象上的接口一模一样。
哦,真的,这令人印象深刻。我一定会看看这个。谢谢!以上是关于为啥 WebSQL 不适用于使用 PhoneGap 制作的 iOS 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章