かなり長い間、放置状態になっていた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 StorageIndexed 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の場合

SafariとChromeの場合は、iPhoneの場合と同じように吹き出しに「SAVE」ボタンが出ているので正常に機能しています。

バージョンは、

  • Safari:3.1
  • Chrome:13.0.782.107

です。

一方、Firefoxではというと、

Firefoxの場合

吹き出しに「SAVE」ボタンが出ていません。既にWeb SQL Databaseの機能が使えなくなっているようです。Firefoxのバージョンは5.0.1です。

8月9日(火)現在、上記バージョンにおいて、Firefoxでは機能しませんでしたが、SafariとChromeにはWeb SQL Databaseの機能が実装されているようです。今後はどうなるかわかりません。早めに、Web Storageなどへの移行も検討した方が良いかもしれません。

関連記事

Trackback URL

2 Comments

  • 名無し

    どうしてそんなにJavaScriptでSQLが使いたいのか…
    どう考えてもlocalStorageの方が使いやすい

    • asato

      どうしても使いたいというわけではないです。
      いずれlocalStorageへの変更も検討したいと思います!

コメントする