Редактирование истории BrowserField - PullRequest
1 голос
/ 14 июня 2011

В моем приложении есть BrowserField, который прекрасно работает.Он перехватывает запросы NavigationRequest на ссылки на моем веб-сайте, которые ведут на внешние сайты, и открывает новые окна для отображения в обычном браузере, что также прекрасно работает.

Проблема, с которой я столкнулся, заключается в том, что если пользователь нажимаетПо ссылке "www.google.com" мое приложение открывает это в новом браузере, но также регистрирует его в BrowserHistory.Поэтому, если они щелкают назад, вдали от Google, они возвращаются к моему приложению, но затем, если они наносят ответный удар снова, BrowserHistory отображает их на той же странице, на которой они находились (потому что возврат из Google не возвращает назад вистория) Я пытался найти способ отредактировать BrowserFist BrowserField, но это кажется невозможным.Если не считать создания собственного класса для регистрации истории посещений, могу ли я что-нибудь сделать?

Если я не очень хорошо объяснил проблему, не стесняйтесь разъяснений.Спасибо

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

Одним из возможных решений этой проблемы было бы отслеживание последнего внутреннего URL-адреса, который был посещен перед текущим URL-адресом NavigationRequest. Затем вы можете проверить, является ли нажатая ссылка внешней ссылкой, как вы это уже делаете, и если это так, вызовите этот метод:

updateHistory(String url, boolean isRedirect)

с последним URL перед внешней ссылкой. Используя ваш пример, следует перезаписать «www.google.com» последним внутренним URL-адресом перед нажатием внешней ссылки.

Вот пример половины псевдокода / половины 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, логическое значение)

1 голос
/ 05 июня 2012

У меня была похожая, но немного другая проблема. Специальные ссылки в html-содержимом, такие как device: smth, используются для открытия сканера штрих-кода, выхода из системы и т. Д., И я хотел, чтобы они не сохранялись в 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
   }
}
...