处理SQL时出错:TypeError:window.openDatabase不是函数

时间:2013-09-04 04:50:11

标签: javascript android html cordova opendatabase

我的代码中有一些奇怪的问题。我已经创建了简单的DB_Function.js来管理html页面中的JS函数。

我在<body onLoad="CALL_DB()">内部调用函数,所以首先会初始化数据库并在需要时创建表。

问题在这里,

  • 工作:Chrome
  • 不工作:Android Mobile&amp;火狐

代码如下:

DB_Function.js

function CALL_DB() {
    try {
        alert("call_db");
        var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
        db.transaction(populateDB, errorCB, successCB);
    } catch (err) {
        alert("Error processing SQL: " + err);
    }
}


function populateDB(tx) {
    try {
        alert("call_table");
        tx.executeSql('DROP TABLE IF EXISTS DEMO');
        tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
        tx.executeSql('INSERT INTO DEMO (id, data) VALUES (3, "C")');
        tx.executeSql('INSERT INTO DEMO (id, data) VALUES (4, "K")');
    } catch (err) {
        alert("Error processing SQL: " + err);
    }
}


function errorCB(tx, err) {
    alert("Error processing SQL: " + err);
}

// Transaction success callback

function successCB() {
    alert("success!");
}

的test.html

<!DOCTYPE html>
<html>
  <head>
    <title>Storage Example</title>

    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
    <script type="text/javascript" charset="utf-8" src="js/DB_function.js"></script>

  </head>
  <body onLoad="CALL_DB()">
    <h1>Example</h1>
    <p>Database</p>
  </body>
</html>

这是我的JS FIDDLE 请帮帮我,我不知道我哪里错了。

感谢您阅读我的查询。

3 个答案:

答案 0 :(得分:3)

您使用的是Web SQL数据库,not supported by Firefox。此外,规范是abandoned by the W3C

请改为IndexedDBcaniuse)。还有至少一个shim使IndexedDB在仅支持Web SQL数据库的浏览器中工作。

代码在Android Browser 4.1.2上的this updated fiddle中“有效”。

答案 1 :(得分:1)

问题在这里,

<script type="text/javascript" charset="utf-8" src="cordova.js"></script>

我已经解决了要加载的实时js文件,因此在启动应用程序时可能无法加载。

所以,我已将其保存在assets/www/js/cordova.js

所以最后它看起来像上面,它完美地为我工作。

 <script type="text/javascript" charset="utf-8" src="js/cordova.js"></script>

答案 2 :(得分:0)

看起来你还没有初始化Cordova / PhoneGap API。您必须先操作deviceReady事件,然后才能操作API

查看以下文档: http://docs.phonegap.com/en/2.9.0/cordova_events_events.md.html#deviceready