進む・戻る履歴の保存・復元方法

##この話題はプログラマ向けです。

この機能はunDonutに思いつきで搭載したのですが、意外と便利な上、いろいろな応用が利きそうな可能性を持っています。そのわりにはあまりこの機能を持つタブブラウザは少ないようです。

今回は進む・戻るの履歴を外部に保存し、後で復元するための手順を解説します。

まず、進む・戻る履歴に関するIEコンポーネントインターフェイスはITravelLogStg,IEnumTravelLogEntry,ITravelLogEntryです。すなわちこの機能はIEにおいてトラベルログと呼ばれています。これらのインターフェイスについてのリファレンスはMSDNにあります。

先にトラベルログを保存する手順について書きます。

  • 最初にするのは、IEコンポーネントからITravelLogStgを取得することです。これはIWebBrowser2からIServiceProviderを介して取得します。
  • 続いてITravelLogStgからトラベルログを列挙するためのインターフェイスIEnumTravelLogEntryを取得します。具体的にはITravelLogStgのEnumEntriesを呼び出します。第一引数はログを取得する方向で、TLEF_RELATIVE_FOREで"進む"のログを、TLEF_RELATIVE_BACKで"戻る"のログを取得できるようになります。第二引数はIEnumTravelLogEntryのポインタのポインタです。
  • ログを取得します。IEnumTravelLogEntryのNextを呼び出してITravelLogEntryを得ます。Nextの第一引数は1、第二引数はITravelLogEntryへのポインタのポインタ、第三引数はNULLで呼び出すとうまくいきました。Nextが失敗するまでループさせて全てのログを取得します。
  • ITravelLogEntryのGetTitle及びGetURLを呼び出してログのタイトルとアドレスを取得します。
  • 得られたアドレスとタイトルをどこか外部ファイルにでも保存しておきます。

今度は保存したトラベルログを復元する方法です。

  • まずIEコンポーネントに適当なページを読み込ませます。OnDocumentCompleteが呼び出されたところで、ログを復元することにします。いろいろ試してみましたがこれ以前だと失敗します。
  • IEnumTravelLogEntryを取得するところまでは保存の時と同じです。
  • ITravelLogStgのCreateEntryを呼び出して、ログを作成します。第一引数がURL、第二引数はタイトル、第三引数は位置関係の基準となるITravelLogEntryへのポインタ、第四引数は第三引数で指定したログに対して前と後ろのどちらに作成するかを指定します。TRUEなら、より前のログとして作成されます。第五引数は作成したITravelLogEntryのポインタのポインタです。これを保存しておいて次のCreateEntryの基準に使うといいでしょう。第一第二引数で与える文字列はLPOLESTRすなわちワイド文字列なのでMultiByteToWideCharで変換しておく必要があります。

こんな感じでログを作成すると、前に戻るなどの操作での移動先を操作できるようになります。

資料は上のMSDNのリファレンスのほかはこれくらいです。ただしなかなか良い感じのソースが載っているので参考になると思います。
http://www.microsoft.com/japan/msdn/columns/webteam/webteam04022001.asp