为啥 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 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

JayData / Phonegap 适用于 iPad 模拟器但不适用于 iPad 设备

为啥点击事件不适用于 iOS 上的 li 元素?

WebSQL,Phonegap。返回最后插入行的 ID

WEB SQL 不适用于 Cordova 本地应用程序

在PhoneGap中访问WebSQL数据库对象

Phonegap fileTransfer.Download 不适用于 ios phonegap 3.0