2010-10-02 31 views
2

我有一个网站在Chrome/Safari中完全正常运行,并严重依赖SQLite存储/访问数据。但是,在Firefox中测试时,第一次调用openDatabase()时会出错。这是我相当标准openDB功能:通过Javascript进行SQLite调用时出现Firefox错误

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是不确定的,当我提醒它,并且打印出未知的错误是“不支持”。我认为SQLite实际上在Firefox中得到了支持,我是否做错了什么或需要浏览器特定的代码?

谢谢! Claudia

回答

3

Firefox没有该功能。 Mozilla并不认为SQLite适用于Web,所以在Firefox 4中,他们将选择并实施IndexedDB规范。 W3C草案(包括Mozilla的提案)。这里是一个不错的博客文章,详细说明差异:http://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/

所以,是的,你将不得不使用客户特定的代码,以支持FF4 - 至少直到索引资料中的其他主流浏览器实现的。对于FF4之前的任何内容,不支持任何客户端数据库(不包括localStorage等)。

+0

虽然它不是“他们自己的数据库API”。它也是一个W3C标准,而且IndexedDB正在由Mozilla,Chromium和Microsoft积极开发和实施。 – sdwilsh 2010-10-03 17:12:53

+0

@sdwilsh:那么我的意思是Mozilla特别对异步API做出了很大的贡献。这是他们自己的API,因为他们认为并设计了它。无论如何,我编辑我的帖子是为了让它更清楚,它不是一个“封闭”的解决方案 - 也就是说,他们正在积极努力使规范达到其最终状态以供所有人使用。谢谢你指出,虽然。 – 2010-10-03 17:57:41

1

它应该是:

if (typeof(window.openDatabase)=='undefined') { 
    alert(...) 
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; 
} 

这应该工作。

相关问题