调用openDatabase的Mobile Safari中的状态错误,DOM异常11无效

时间:2011-06-08 19:31:34

标签: javascript ios sqlite exception mobile-safari

我有一个在init上调用openDatabase()的webapp。这在桌面浏览器Chrome和Safari中运行良好;但是,当我尝试在iOS 4.3.3上的Mobile Safari中打开应用程序时,我在第一页加载时遇到异常:

“错误:INVALID_STATE_ERROR:DOM例外11”

这在一个简单函数中的openDatabase()失败:

       try {
            if( !window.openDatabase) {
                console.log('SQLite is not supported by this browser');
            }
            else {
                db = openDatabase('MyMobileDb', '1.0', 'MyMobileDb', 65536);
                if (doreset)
                {
                    //my drop and reset DB function
                } else
                {
                    //my init DB function
                }
            }
        }
        catch(e) {
            console.log(e);
        }

未创建数据库,也无法与应用程序进一步交互。运行早期版本的iOS的其他开发人员没有遇到针对相同代码bade的此问题。我也从我们的QA团队获得Android报告类似行为的报告。 Android 3.1有效,而2.2和2.1则无效。

我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:6)

我意识到在你的问题中情况并非如此,但是为了防止其他人在这里寻找答案,我有同样的错误,这是因为我传递的是数字值版本而不是字符串

答案 1 :(得分:2)

我有一些在离线移动应用程序中运行的WebSQL代码,可在iOS 4.3.3和桌面Safari中运行。

INVALID_STATE_ERROR: DOM Exception 11令人沮丧地不透明,因为它可以引用很多不同的东西,但我怀疑你链接到的WebKit问题在你的情况下有答案。无论如何,对可能有帮助的事情......

我的代码中的FWIW我通过“有点”工厂初始化数据库连接,这似乎工作正常,在我的应用程序中持续存在(事实上,我使用数据库连接'factory' plus 第二个原型对象封装了我的所有SQL,有点像Javascript DAO,但为了简洁起见,我会把这一点留下来。)

我已经创建了一个带有样本“工厂”的要点(这是我的一些生产代码的推断,所以对任何遗漏都道歉):http://gist.github.com/1044759

此代码将初始化您的数据库连接,并创建相关的表(如果它们尚不存在)。

这是一些示例脚本(可能是$(document).ready),它将设置数据库连接:

// Initialise local db
var mydb = new DbConnection().getDb();

要使用连接,只需使用mydb作为数据库位,即使用正常事务Javascript调用,即:

mydb.transaction(function(transaction){
  transaction.executeSql(...

希望有所帮助。