かなり長い間、放置状態になっていたStray Childですが、先日、Amazon S3ホスティングを試してみるで久しぶりにメンテナンスしました。
その際に、SQLiteにデータを保存できないという問題が発生していましたので、ちょっと調べてみました。
どうやら、ブラウザからSQLを使ってローカルのデータベース(SQLite)に保存するという、Web SQL Databaseの機能が、W3Cの定めるHTML5の仕様から廃止されたようです。
Web SQL Database
Beware. This specification is no longer in active maintenance and the Web Applications Working Group does not intend to maintain it further.
訳)
注意!この規格は、アクティブメンテナンスではなくなります。そして、ワーキンググループでは、今後もメンテナンスしていく予定はありあせん。
残念です。HTML5には同じような機能で、Web StorageやIndexed Database APIがあるので、こちらにより注力してくのでしょう。
ということなのですが、あきらめの悪い私は、なんとか動くようにならないか試してみることにしました。
openDatabaseを呼び出すところでエラーになっているようです。
試しに、データベースのサイズを設定する第4引数を指定するようにしてみました。
try { db = openDatabase('Stray Child', '1.0', 'Stray Child', 10000000); } catch (error) { isDbConnect = false; } finally { return isDbConnect; }
iPhoneで確認しみたところ、
吹き出しに「SAVE」ボタンが表示されているので、動くようになりました。Web SQL Databaseの機能が使えるということです。
iOS 4.2が出て3か月ほど経過しました。iOS 4.2ではJavaScriptで加速度センサーを扱えるなど便利になった反面、以前に比べて不便になった面もあります。1つが、内蔵データベースであるSQLiteです。HTML5の仕様からWeb SQL Databaseが廃止されたためでしょうか、iOS 4.2ではJavaScriptからSQLiteへのアクセスができなくなりました。そのため、本連載の第2回で作成した、SQLiteを使ったGPSレコーダーは動作しなくなっています。
ASCII.jp:iOS 4.2×localStorageで作るGPSレコーダー|古籏一浩のJavaScriptラボより引用。
という記事もあったのでだめかと思いましたが、以外にもいけました。iPhoneのバージョンは4.3.3です。
PCのブラウザでも確認してみたいと思います。
SafariとChromeの場合は、iPhoneの場合と同じように吹き出しに「SAVE」ボタンが出ているので正常に機能しています。
バージョンは、
- Safari:3.1
- Chrome:13.0.782.107
です。
一方、Firefoxではというと、
吹き出しに「SAVE」ボタンが出ていません。既にWeb SQL Databaseの機能が使えなくなっているようです。Firefoxのバージョンは5.0.1です。
8月9日(火)現在、上記バージョンにおいて、Firefoxでは機能しませんでしたが、SafariとChromeにはWeb SQL Databaseの機能が実装されているようです。今後はどうなるかわかりません。早めに、Web Storageなどへの移行も検討した方が良いかもしれません。