通过Javascript进行SQLite调用时Firefox出错
我有一个完全在Chrome/Safari中运行的站点,它严重依赖SQLite来存储/访问数据。但是,在Firefox中进行测试时,它在第一次调用openDatabase()时出错。这是我相当标准的openDB函数:通过Javascript进行SQLite调用时Firefox出错,javascript,firefox,sqlite,Javascript,Firefox,Sqlite,我有一个完全在Chrome/Safari中运行的站点,它严重依赖SQLite来存储/访问数据。但是,在Firefox中进行测试时,它在第一次调用openDatabase()时出错。这是我相当标准的openDB函数: function openDB(){ try { if (!window.openDatabase) { alert('not supported'); } else { var shortName = 'tales';
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时,它是未定义的,并且打印的未知错误是“不受支持的”。我假设Firefox实际上支持SQLite,是我做错了什么,还是它需要特定于浏览器的代码
谢谢大家!!
克劳迪娅火狐没有这个功能。Mozilla认为SQLite不适合web,因此在Firefox4中,他们将选择并实施W3C的IndexedDB规范草案(包括Mozilla的提案)。下面是一篇很好的博客文章,详细介绍了这些区别: 因此,是的,为了支持FF4,您必须使用特定于客户端的代码——至少在其他主要浏览器中实现IndexedDB之前是这样。对于FF4之前的版本,不支持任何客户端数据库(不包括本地存储等)。应该是:
if (typeof(window.openDatabase)=='undefined') {
alert(...)
这应该行得通。不过这不是“他们自己的数据库API”。它也是一个W3C标准,Mozilla、Chromium和Microsoft正在积极开发和实施IndexedDB。@sdwilsh:我的意思是Mozilla对异步API做出了巨大贡献。从某种意义上说,这是他们自己的API,他们想出并设计了它。无论如何,我编辑我的文章是为了让它更清楚地表明它不是一个“封闭”的解决方案——也就是说,他们正在积极地尝试将规范修改到它的最终状态,以供所有人使用。谢谢你指出这一点。
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;
}