通过Javascript进行SQLite调用时Firefox中的错误

时间:2010-10-02 17:29:25

标签: javascript firefox sqlite

我有一个在Chrome / Safari中完全正常运行的网站,并且很大程度上依赖SQLite来存储/访问数据。但是,在Firefox中进行测试时,第一次调用openDatabase()时会出错。这是我相当标准的openDB函数:

function openDB(){
try {
    if (!window.openDatabase) {
        alert('not supported');
    } else {
        var shortName = 'tales';
        var version = '1.0';
        var displayName = 'Tall Tales Database';
        var maxSize = 65536; // in bytes
        db = openDatabase(shortName, version, displayName, maxSize); 
        // You should have a database instance in db.
    }
} catch(e) {
    // Error handling code goes here.
    if (e == 2) {
        // Version number mismatch.
        alert("Invalid database version.");
    } else {
        alert("Unknown error "+e+".");
    }
    return;
}

}

就像我说的那样 - 当我提醒它时,openDatabase是未定义的,并且打印的Unknown错误是“不支持的”。我认为在Firefox中实际支持SQLite,我做错了什么或者它需要特定于浏览器的代码吗?

谢谢! 克劳迪亚

3 个答案:

答案 0 :(得分:3)

Firefox没有该功能。 Mozilla认为SQLite不适合网络,因此在Firefox 4中他们将选择并实施IndexedDB规范。 W3C的草案(包括Mozilla的提案)。这是一篇很好的博客文章,详细说明了这些差异:http://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/

所以是的,您必须使用客户端特定代码才能支持FF4 - 至少在其他主流浏览器中实现IndexedDB之前。对于FF4之前的任何内容,不支持任何客户端数据库(不包括localStorage等)。

答案 1 :(得分:1)

应该是:

if (typeof(window.openDatabase)=='undefined') {
  alert(...)

答案 2 :(得分:0)

function openDB(){
try {
    if (!!window.openDatabase) {
        var shortName = 'tales';
        var version = '1.0';
        var displayName = 'Tall Tales Database';
        var maxSize = 65536; // in bytes
        db = openDatabase(shortName, version, displayName, maxSize); 
        // You should have a database instance in db.
    } else {
        alert('not supported');
    }
} catch(e) {
    // Error handling code goes here.
    if (e == 2) {
        // Version number mismatch.
        alert("Invalid database version.");
    } else {
        alert("Unknown error "+e+".");
    }
    return;
}

这应该有效。