ブラウザー履歴
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 ページの状態は保存されません。 アプリケーションにとって意味のある振る舞いをコーディングする必要があります。
ブラウザー履歴とイベント応答のセットアップ
- 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 アドレスのみが保持されます。
- (例えば) 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
- このようなイベントの 1 つで、新規ページがブラウザー履歴に追加されるか、または別のページにナビゲートされます。後で、新規ページの追加またはこれへの移動方法を説明します。まず、イベント・ハンドラーのセットアップ方法を説明します。
ブラウザー履歴にエントリーを追加
myHistory.addToHistory("myNewPage");
- 新規ページ・イベント・ハンドラーが実行される。この例では、ハンドラー名は myHistoryChanged です。
- ユーザーが「戻る」ボタンをクリックすると、ブラウザーの Web アドレスに直前のページの名前が組み込まれる。また、その後、「進む」ボタンが使用可能になります。
前ページへのナビゲート
アプリケーションの前ページにナビゲートできます。以下にコードの例を示します。
myHistory.goBack();
- 新規ページ・イベント・ハンドラーが実行される。この例では、ハンドラー名は myHistoryChanged です。
- ブラウザーの Web アドレスが変更される (該当する場合)。
- 新規 Web アドレスを反映して、後続のナビゲーション (進む、および戻る) が変更される。
次ページへのナビゲート
アプリケーションの次ページにナビゲートできます。以下にコードの例を示します。
myHistory.goForward();
- 新規ページ・イベント・ハンドラーが実行される。この例では、ハンドラー名は myHistoryChanged です。
- ブラウザーの Web アドレスが変更される (該当する場合)。
- 新規 Web アドレスを反映して、後続のナビゲーション (進む、および戻る) が変更される。