2011-06-08 28 views
3

我有一個web應用程序,它在init上調用openDatabase()。這適用於桌面瀏覽器Chrome和Safari;然而,當我嘗試打開移動Safari瀏覽器的應用程序在iOS 4.3.3,我得到的第一個頁面加載一個例外:移動Safari中的DOM異常11無效狀態錯誤調用openDatabase

「錯誤:INVALID_STATE_ERROR:DOM異常11」

這失敗的的openDatabase( )一個簡單的函數內:

 try { 
      if(!window.openDatabase) { 
       console.log('SQLite is not supported by this browser'); 
      } 
      else { 
       db = openDatabase('MyMobileDb', '1.0', 'MyMobileDb', 65536); 
       if (doreset) 
       { 
        //my drop and reset DB function 
       } else 
       { 
        //my init DB function 
       } 
      } 
     } 
     catch(e) { 
      console.log(e); 
     } 

未創建的數據庫,並與該應用沒有進一步交互是可能的。運行早期版本的iOS的其他開發人員沒有遇到相同代碼的問題。我還從我們的QA團隊獲取了Android的報告,顯示了類似的行爲。 Android 3.1的作品,而2.2和2.1不。

我能做些什麼來解決這個問題?

+0

經過一番研究,我看到了這個[WebKit bug](https://bugs.webkit.org/show_bug.cgi?id=48953),它看起來有些可疑。 – Christopher 2011-06-09 01:20:37

回答

2

我有一些WebSQL代碼在脫機移動應用程序中運行,它可以在iOS 4.3.3和桌面Safari中運行。

INVALID_STATE_ERROR: DOM Exception 11令人沮喪的不透明,因爲它可以涉及很多不同的事情,但我懷疑你鏈接到的WebKit問題有你的情況的答案。無論如何,可能會有所幫助......

FWIW在我的代碼我初始化一個「有點」工廠的數據庫連接,這似乎工作正常,堅持我的應用程序(實際上,我使用數據庫連接'工廠'加上第二個原型對象封裝了我所有的SQL,有點像Javascript DAO,但爲了簡潔起見,我會留下這一點)。

我已經創建了一個樣本「工廠」中有一個要點(這是我的一些生產代碼外推,所以對於任何疏漏道歉):http://gist.github.com/1044759

這段代碼初始化數據庫連接,以及如果它們不存在,則創建相關的表格。

下面是一些示例腳本(也許$(document).ready),這將建立數據庫連接:

// Initialise local db 
var mydb = new DbConnection().getDb(); 

使用的連接,你簡單的撥打你的正常交易的Javascript,使用mydb作爲數據庫位,即:

mydb.transaction(function(transaction){ 
    transaction.executeSql(... 

希望有所幫助。

+0

感謝您的提示。經過一番爭論之後,我最終放棄了整個WebSQL基礎架構,轉而使用Web Storage。本地/會話存儲幾乎適用於所有平臺,因此滿足了我的需求。如果我回到WebSQL,我一定會參考你的答案。 – Christopher 2011-07-01 03:40:59

+0

感謝您的更新。它似乎像'localStorage'和'IndexedDB'是前進的道路。 – Ben 2011-07-01 05:54:40

6

我意識到這不是你的問題的情況,但爲了防止別人在這裏尋找答案的絆倒,我有同樣的錯誤,這是因爲我通過號碼版本,而不是a 字符串

+0

已投票。它幫助了我。感謝分享! – 2013-09-04 03:47:09

相關問題