ブラウザー履歴

IBM® Web サイト (http://www.ibm.com) にアクセスし、次に IBM Rational® Cafe (http://www.ibm.com/rational/cafe) にアクセスする場合を考えます。 リモート・サーバーから 2 つの異なる Web ページが提供され、ブラウザーの「戻る」ボタンおよび「進む」ボタンをクリックすると、2 つのサイトそれぞれに再度アクセスできます。対照的に、Rich UI アプリケーションのメイン処理は、ブラウザー内のみで行われます。アプリケーションで新規コンテンツをレンダリングでき、またサーバーにアクセスして表示を更新することもできます。しかしほとんどの場合、「戻る」および「進む」ボタンは使用不可になっているかまたは他の Web サイトの処理に直接進みます。

Rich UI では、別個の Web ページとして識別するために、スクリーンの内容を決定できます。この決定は、履歴内の関数にアクセスすることによって施行します。履歴は、製品に付属する Rich UI ハンドラー・パーツです。履歴を使用すると、実行時にページをブラウザー履歴に割り当てることができ、ユーザーは「戻る」および「進む」ボタンを使用して、アプリケーションのさまざまなページにアクセスできます。また、ユーザーがブラウザーを閉じようとしているときに応答することもできます。

ブラウザー履歴メカニズムでは、指定された Web ページの状態は保存されません。 アプリケーションにとって意味のある振る舞いをコーディングする必要があります。

ブラウザー履歴とイベント応答のセットアップ

ブラウザー履歴とイベント応答をセットアップするには、次の手順で行います。
  1. Rich UI アプリケーションで、履歴に基づいて Rich UI ハンドラーを宣言します。次に概略を示します。
    import com.ibm.egl.rui.history.History;
    import com.ibm.egl.rui.history.HistoryChanged;
    import com.ibm.egl.rui.history.OnBeforeUnloadMessageFunction;
    
    Handler MyApplication Type RUIHandler { onConstructionFunction=start }
       myHistory History {};
    end

    履歴に基づいて変数を宣言することによって、ユーザーのブラウザーに表示される Web アドレスに #empty を追加します。その後の処理では、empty は新規ページの名前です。新規ページは、アプリケーション固有のブラウザー履歴には追加されますが、ブラウザー自体の履歴には追加されません。ブラウザー自体の履歴には、オリジナルの Web アドレスのみが保持されます。

  2. (例えば) on-construction 関数に、特定のユーザー・イベントに応答して実行される関数 (イベント・ハンドラー) へのアクセスをセットアップできます。
    • このようなイベントの 1 つで、新規ページがブラウザー履歴に追加されるか、または別のページにナビゲートされます。後で、新規ページの追加またはこれへの移動方法を説明します。まず、イベント・ハンドラーのセットアップ方法を説明します。
      新規ページ・イベントに対するカスタム応答を使用可能にするには、addListener 関数を起動して、コーディングしたイベント・ハンドラーを参照します。次に、addListener 関数の起動例を示します。
      myHistory.addListener(myHistoryChanged);
      次の委譲パーツで、参照されるイベント・ハンドラーの特性の概要を示します。
      Delegate
         HistoryChanged(newPageName String in)
      end

      上記では、新規ページ・イベントのイベント・ハンドラーは文字列を受け入れます。addListener を起動してカスタム関数を参照する場合、カスタム関数は次の場合に起動されます。つまり、ブラウザーによって empty という名前の初期ページが追加されたとき、および後続ページをユーザーが追加したときです。それぞれの場合では、ユーザーのブラウザーには Web アドレスが表示され、ページ名が含まれています。ページ名は、ポンド記号 (#) に続いて表示されるアドレス・サブセットです。また、EGL ランタイムでは、ユーザーの関数にこのページ名が提供されます。

      次に、新規ページ・イベント後に起動されるイベント・ハンドラーの例を示します。myLabel は、ユーザー画面のウィジェットであると想定します。
      function myHistoryChanged(newPageName String in)
         myLabel.text = "History was changed. Current page name is "+ newPageName;
      end

      複数の新規ページ・イベント・ハンドラーを登録するには、addListener を複数回実行します。参照される関数は、登録順に実行されます。同じ関数を複数回登録した場合でも、すべての登録が有効です。

    • 2 つ目のイベントは、ユーザーがブラウザーまたはブラウザー・タブを閉じようとすることです。
      この場合は、keepUserOnPage 関数を起動し、ユーザーがコーディングしたイベント・ハンドラーを参照します。次に、keepUserOnPage 関数の起動例を示します。
      history.keepUserOnPage(stayHere);
      次の委譲パーツで、参照されるイベント・ハンドラーの特性の概要を示します。
      Delegate
         OnBeforeUnloadMessageFunction() returns(String)
      end

      上記では、ブラウザー・クローズ・イベントのイベント・ハンドラーから文字列が戻されます。その文字列はダイアログ・ボックスに表示され、ブラウザーのクローズをユーザーが確認したり取り消したりできます。

      次に、ブラウザー・クローズ・イベントの後に起動されるイベント・ハンドラーの例を示します。
      function stayHere() returns(String)
      		return ("Close the application?");
      	end

ブラウザー履歴にエントリーを追加

アプリケーション固有のブラウザー履歴にエントリーを追加するには、addToHistory 関数を起動します。 次の例では、myNewPage という名前のページを追加します。
myHistory.addToHistory("myNewPage");
以下を想定しています。
  • 新規ページ・イベント・ハンドラーが実行される。この例では、ハンドラー名は myHistoryChanged です。
  • ユーザーが「戻る」ボタンをクリックすると、ブラウザーの Web アドレスに直前のページの名前が組み込まれる。また、その後、「進む」ボタンが使用可能になります。

前ページへのナビゲート

アプリケーションの前ページにナビゲートできます。以下にコードの例を示します。

myHistory.goBack();
以下を想定しています。
  • 新規ページ・イベント・ハンドラーが実行される。この例では、ハンドラー名は myHistoryChanged です。
  • ブラウザーの Web アドレスが変更される (該当する場合)。
  • 新規 Web アドレスを反映して、後続のナビゲーション (進む、および戻る) が変更される。

次ページへのナビゲート

アプリケーションの次ページにナビゲートできます。以下にコードの例を示します。

myHistory.goForward();
以下を想定しています。
  • 新規ページ・イベント・ハンドラーが実行される。この例では、ハンドラー名は myHistoryChanged です。
  • ブラウザーの Web アドレスが変更される (該当する場合)。
  • 新規 Web アドレスを反映して、後続のナビゲーション (進む、および戻る) が変更される。

フィードバック