【问题标题】:Error in Firefox when making SQLite calls via Javascript通过 Javascript 进行 SQLite 调用时 Firefox 出错
【发布时间】:2010-10-02 17:29:25
【问题描述】:

我有一个在 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 是未定义的,并且打印的未知错误是“不受支持的”。我假设 Firefox 实际上支持 SQLite,我做错了什么还是需要特定于浏览器的代码?

谢谢! 克劳迪娅

【问题讨论】:

    标签: javascript firefox sqlite


    【解决方案1】:

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

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

    【讨论】:

    • 这不是“他们自己的数据库 API”。它也是 W3C 标准,Mozilla、Chromium 和 Microsoft 正在积极开发和实施 IndexedDB。
    • @sdwilsh:我的意思是 Mozilla 专门为异步 API 做出了巨大贡献。从某种意义上说,这是他们自己构思和设计的 API。无论如何,我编辑了我的帖子,以便更清楚地表明它不是一个“封闭”的解决方案——也就是说,他们正在积极尝试将规范设置为最终状态以供所有人使用。谢谢你指出这一点。
    【解决方案2】:

    应该是:

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

    【讨论】:

      【解决方案3】:
      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;
      }
      

      应该可以的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-17
        • 1970-01-01
        • 2013-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-27
        相关资源
        最近更新 更多