【问题标题】:window.openDatabase throws TypeError: Object[object DOMWindow] has no method 'openDatabase' on Androidwindow.openDatabase 抛出 TypeError: Object[object DOMWindow] has no method 'openDatabase' on Android
【发布时间】:2012-07-22 01:20:18
【问题描述】:

我正在使用 Sencha Touch 2.0.1 并尝试使用以下方法打开 SQLite 数据库:

var db = window.openDatabase("mydatabase", "1.0", "mydatabase", 2000000);

在 iPhone/IOS 模拟器上可以使用。在 Android 设备或模拟器上出现异常:

TypeError: Object[object DOMWindow] has no method 'openDatabase'

我正在使用 Sencha 构建原生应用程序(尽管我正在迅速失去信心......)所以我没有使用 PhoneGap。

Sencha 的打包创建和 AndroidManifest.xml 文件,但我看不到为

设置的权限
android.permission.WRITE_EXTERNAL_STORAGE

我不确定这是否是问题所在!

非常感谢任何帮助,因为这让我悄悄发疯。

编辑:这是 JS - 它是 Sencha Touch 生成应用程序的一部分:

Ext.application({
name: 'MyApp',

requires: [
    'Ext.MessageBox'
],

views: ['Main'],

icon: {
    '57': 'resources/icons/Icon.png',
    '72': 'resources/icons/Icon~ipad.png',
    '114': 'resources/icons/Icon@2x.png',
    '144': 'resources/icons/Icon~ipad@2x.png'
},

isIconPrecomposed: true,

startupImage: {
    '320x460': 'resources/startup/320x460.jpg',
    '640x920': 'resources/startup/640x920.png',
    '768x1004': 'resources/startup/768x1004.png',
    '748x1024': 'resources/startup/748x1024.png',
    '1536x2008': 'resources/startup/1536x2008.png',
    '1496x2048': 'resources/startup/1496x2048.png'
},

launch: function() {
    // Destroy the #appLoadingIndicator element
    Ext.fly('appLoadingIndicator').destroy();

    // Initialize the main view
    Ext.Viewport.add(Ext.create('MyApp.view.Main'));
    //

    try {

        var db = window.openDatabase("mydatabase", "1.0", "mydatabase", 2000000);

        if ( !db ) {
            var m3 = new Ext.MessageBox(); 
            m3.alert("db test!", "openDatabase failed!");

        } else {
           var m3 = new Ext.MessageBox(); 
           m3.alert("db test!", "openDatabase ok!");
        }
    }
    catch(err){

        var m2 = new Ext.MessageBox(); 
        m2.alert("db test!", "exception caught: " + err.name + ":" + err.message);


    }

}

});

【问题讨论】:

  • 这个问题有帮助吗? stackoverflow.com/questions/2474475/…
  • 我看到了这个但假设它是 Java 而不是 Javascript (WebSettings settings = myWebView.getSettings(); )。
  • @Nerd 这可以解释为什么他的数据库调用会被阻止,但不能解释为什么openDatabase 甚至不存在。
  • 我觉得错误在于被引用的context。如果可以的话,你能发布你的 JS 吗?
  • 我添加了代码 sn-p - 它是更广泛的 sencha touch 生成应用程序的一部分(我添加了 openDatabase 调用)。

标签: javascript android sencha-touch-2 opendatabase


【解决方案1】:

在您的环境中似乎不可用。这是一个简单的检查方法:

if (window.openDatabase) {
    // available
} else {
    // not available
}

离线 SQL 目前可在 Safari、Google Chrome、 iPhone 和 Palm 的 WebOS(针对其应用程序和基于浏览器的 内容)。

http://creativepark.net/1191

【讨论】:

  • 如果我在浏览器 (Chrome) 中运行应用程序就可以了(因为它可以打开数据库)。我很确定 sqlite 在 Android 中可用 - 我认为问题更多在于 Sencha。
猜你喜欢
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多