2014-03-27 52 views
0

我讀過several questions關於這類問題,所以我知道onupgradeneeded的用途,它應該被調用以及瀏覽器兼容性問題。IndexedDB onupgradeneeded不需要在iOS上觸發

我正在開發一個應用程序,該應用程序應該支持桌面上的Chrome和iOS上的Safari。我在Chrome中使用IndexedDB,但使用IndexedDBShim實現時使用移動Safari時返回到WebSQL。

該系統在Chrome中正常工作。在移動版Safari中,我第一次加載沒有緩存數據的頁面時,它將無法創建數據庫,因爲onupgradeneeded不是所調用的。但是:如果我重新加載頁面,第二次加載onupgradeneeded調用。從那裏,墊片工作正常。

目前我的修復程序是顯示一個警告,要求用戶刷新頁面 - 然後工作。

我能做些什麼更好?

+0

代碼?請注意事件被命名爲'upgradeneeded'。該回調名爲'onupgradeneeded'。 – buley

+1

謝謝。遇到這個問題,我保持簡單並使用[Mozilla Dev頁面](https://developer.mozilla.org/en-US/docs/IndexedDB/Using_IndexedDB)中的代碼。當我有這個工作時,我會把它放在我的生產中。 – Daniel

回答

1

我也注意到indexedDBShim的這個問題。如果你等待幾毫秒它可以正常工作,那麼你可能會延遲你的代碼?

我知道這是不是一個完美的答案,但是這是一個正在發生的錯誤:

"could not prepare statement (1 no such table: dbVersions)" 

不知怎的,這個錯誤是隱藏的(墊片中的一個bug),爲維護我看起來之一當我有時間時進入它:)。

此錯誤是因爲該代碼被稱爲有點快(約1570線某處):

tx.executeSql("SELECT * FROM dbVersions where name = ?", [name], function(tx, data){ 

本表不存在只因這代碼尚未執行(約1494行) :

tx.executeSql("CREATE TABLE IF NOT EXISTS dbVersions (name VARCHAR(255), version INT);", [], function(){ 

總之,沒有什麼可以做這件事,因爲它是在墊片中的錯誤,延遲代碼是我想解決它在你身邊的唯一途徑。另一種可能性是修理墊片,但這需要更多的時間。

+1

大眼睛!你也是IDB的開發者嗎?我們很樂意在https://groups.google.com/forum/#!forum/indexeddb-users上提供您 - 這四家頂級SO IDB開發人員都在那裏。 – buley

+0

這就是解決辦法,謝謝!當錯誤發生時並沒有解決這個問題的時候,我嘗試了一個腳本化的刷新,但是當用戶進行刷新操作時,我應該已經意識到這是一種競爭條件。非常感謝你! – Daniel

相關問題