iPhone/iPod touch Safari のスクロール位置情報を記録する

iPhone/iPod touchJailbreak して Safariにパッチを当てると、ローカルの HTMLファイルをブラウジングできるようになります。
Safariの操作性は快適なんだけど、問題はしょっちゅう落ちること。特に大きなファイルを読み込んでいるときに落ちやすいようで、落ちるたびにスクロールして元の状態にもどすのが大変だったりします。
Safariが安定してくれればいいんだけど、まだまだ時間がかかりそう。

そんなわけで、ブラウンジングしているファイルとスクロール位置を記憶するスクリプトを作ってみました。
動作条件は以下の通り。

動作確認は iPod touch 2.0.1 で行っています。

Download

ダウンロードはこちらから。

導入

  1. zip ファイル中の shioriディレクトリを SFTPなどで iPhone に転送します。 (例) /var/mobile/media/shiori
  2. iPhone Safari を起動して 1で転送した shiori/shiori.html をブックマークします。
  3. shiori/save.jsファイルの中身を "Save" という名前で Bookmark登録します。登録方法はこちらが参考になります。

使い方

位置の記憶
ローカルファイルを Safariで読み込み、導入3 で作成した "Save" Bookmarkを読み込みます。
Saveに成功するとダイアログを表示します。

Save後は、画面の左下に「S」マークが現れます。マークをクリックするといつでも位置情報を保存できます。


位置の読み込み
導入2 で作成した shiori.html ブックマークを読み込みます。
記憶したファイルの一覧が表示されます。

選択するとファイルを読み込みます。読み込みが完了すると記憶した位置に自動的に移動します。(大きなファイルだと読み込み終わって移動するまでに時間がかかります。。)


位置の削除
shiori.html ブックマークを読み込んだ画面の右上の "to Delete mode"ボタンを押すと記憶した削除モードになり、選択した項目を削除できます。


その他

  • 位置情報の記憶には iPhone 2.0の Safariから対応した LocalDatabaseを利用しています。
  • 位置情報を復元するために、frameを利用しています。大きさ 100%のframeを作成して、frame外からファイルを読み込ませ、読み込みが完了したあとでスクロール位置を移動しています。
  • 画面デザインには iPhone UI Kit を使用しています。
  • SQLiteの Datetime型を扱うためにSQLiteのdatetime型とDateオブジェクトの相互変換ライブラリを使用しています。
  • 本当は Jailbreakなしでも使えるように bookmarklet化も試してみたけど、上手く行かない。LocalDatabaseのクロスドメイン制約は何とかなっても、frameのクロスドメイン制約を乗り越えられず。。結局、Jailbreakがインストールが大変だったりとなんだか微妙なものに。。


参考サイト