1

アプリに BrowserField があり、うまく機能します。外部サイトに移動する私の Web サイト上のリンクへの NavigationRequests をインターセプトし、新しいウィンドウを表示して通常のブラウザに表示します。これもうまく機能します。

私が抱えている問題は、ユーザーがリンクをクリックして「www.google.com」と言うと、アプリが新しいブラウザーで開くだけでなく、BrowserHistory にもログインすることです。したがって、Google から離れてクリックバックすると、私のアプリに戻りますが、もう一度クリックすると、BrowserHistory は同じページに移動します (Google から戻っても、 history) BrowserField の BrowserHistory を編集する方法を見つけようとしましたが、これは不可能のようです。閲覧履歴をログに記録するための独自のクラスを作成する以外に、何かできることはありますか?

問題をうまく説明できなかった場合は、ためらわずに説明してください。ありがとう

4

2 に答える 2

2

この問題の 1 つの考えられる解決策は、現在の NavigationRequest URL の前にアクセスされた最後の内部 URL を追跡することです。次に、クリックされたリンクが外部リンクであるかどうかを確認することができます。

updateHistory(String url, boolean isRedirect)

外部リンクの前の最後の URL を使用します。あなたの例を使用すると、外部リンクがクリックされる前の最後の内部 URL で「www.google.com」が上書きされます。

私のソリューションを説明するための半分の疑似コード/半分の Java を次に示します。

BrowserFieldHistory history = browserField.getHistory():
String lastInnerURL = "";
if navigationRequest is an outside link {
    history.updateHistory(lastInnerURL, true);
    // Handle loading of outer website
} else {
    lastInnerURL = navigationRequest;
    // Visit inner navigation request as normal
}

http://www.blackberry.com/developers/docs/5.0.0api/net/rim/device/api/browser/field2/BrowserFieldHistory.html#updateHistory(java.lang.String, boolean)

于 2011-06-21T20:07:55.453 に答える
1

同様の問題がありましたが、少し異なります。device:smth のような HTML コンテンツ内の特別なリンクは、バーコード スキャナーやログアウトなどを開くために使用され、BrowserFieldHistory に保存されないようにしました。WebWork のソース コードで、そのための興味深い回避策を見つけました。必要なのは、以下のように最後に例外をスローすることだけです。

public void handleNavigationRequest( BrowserFieldRequest request ) throws Exception {
   if scheme equals to device {
     // perform logout, open barcode scanner, etc
     throw new Exception(); // this exception prevent saving history
   } else {
      // standard behavior
   }
}
于 2012-06-05T13:32:40.530 に答える