2010-10-02 52 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; 
} 

這應該工作。

相關問題