尝试在设备上执行代码

时间:2015-02-08 15:06:30

标签: javascript cordova

我正在尝试使用侦听器在设备上执行一些Javascript代码。

似乎没有调用代码 - 我的控制台中没有任何内容,也没有设置任何变量。

这是我正在使用的代码示例:

    <script>

                // Cordova is ready
function onDeviceReady() {
  var db = window.sqlitePlugin.openDatabase({name: "my.db"});

  db.transaction(function(tx) {
    tx.executeSql('DROP TABLE IF EXISTS test_table');
    tx.executeSql('CREATE TABLE IF NOT EXISTS test_table (id integer primary key, data text, data_num integer)');

    tx.executeSql("INSERT INTO test_table (data, data_num) VALUES (?,?)", ["test", 100], function(tx, res) {
      console.log("insertId: " + res.insertId + " -- probably 1");
      console.log("rowsAffected: " + res.rowsAffected + " -- should be 1");

      tx.executeSql("select count(id) as cnt from test_table;", [], function(tx, res) {
        console.log("res.rows.length: " + res.rows.length + " -- should be 1");
        console.log("res.rows.item(0).cnt: " + res.rows.item(0).cnt + " -- should be 1");
      });

    }, function(e) {
      console.log("ERROR: " + e.message);
    });
  });
}
// Wait for Cordova to load
document.addEventListener("deviceready", onDeviceReady, false);

</script>

现在,我不是主要的Javascript开发人员(所以这个问题可能很简单),但有没有理由说明代码没有执行?我是否必须在匿名函数中运行它?

如何让onDeviceReady()函数执行?

2 个答案:

答案 0 :(得分:0)

deviceready是特殊的Cordova活动;除非您在Cordova环境中启动代码,否则事件永远不会被触发(并且您的代码永远不会被执行)。

可以通过将浏览器添加为平台来在浏览器中运行Cordova。有关详细信息,请参阅http://www.raymondcamden.com/2014/09/24/Browser-as-a-platform-for-your-PhoneGapCordova-apps

你也可以 使用像Ripple这样的东西来模仿Chrome中的Cordova环境。

答案 1 :(得分:0)

由于Cordova-SQLitePlugin API是异步的,因此您应该在db可用/创建后执行事务。尝试以类似的方式实现它:

    var openDb = function (name, ok, error) {
      try {
        // SQLitePlugin always uses callbacks to specify the status of 'open' operation
        var dbRef = window.sqlitePlugin.openDatabase({name: name},
          function (db) {
            log("DataBase " + name + " opened!");
            ok(db);
          }, function (e) {
            try {
              dbRef.close();
            } catch (e) {
              log("Could not close database", e);
            }
            error(e);
          });
      } catch (e) {
        log("Could not open " + name + " DataBase");
        error(e);
      }
    };

    openDb("my.db", function(db){
       db.transaction(function(tx) {
        tx.executeSql('DROP TABLE IF EXISTS test_table');
        tx.executeSql('CREATE TABLE IF NOT EXISTS test_table (id integer primary key, data text, data_num integer)');

        tx.executeSql("INSERT INTO test_table (data, data_num) VALUES (?,?)", ["test", 100], function(tx, res) {
          console.log("insertId: " + res.insertId + " -- probably 1");
          console.log("rowsAffected: " + res.rowsAffected + " -- should be 1");

          tx.executeSql("select count(id) as cnt from test_table;", [], function(tx, res) {
            console.log("res.rows.length: " + res.rows.length + " -- should be 1");
            console.log("res.rows.item(0).cnt: " + res.rows.item(0).cnt + " -- should be 1");
          });

        }, function(e) {
          console.log("ERROR: " + e.message);
        });
      });
    });