【问题标题】: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 是少数支持/支持它的少数之一。

标签: javascript jquery ios cordova


【解决方案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@和返回对象上的接口一模一样。
  • 哦,真的,这令人印象深刻。我一定会看看这个。谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-05-14
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
相关资源
最近更新 更多