我有一个在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,我做错了什么或者它需要特定于浏览器的代码吗?
谢谢! 克劳迪亚
答案 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;
}
这应该有效。