Редактирование истории BrowserField

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

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

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


person Woody    schedule 14.06.2011    source источник


Ответы (2)


Одним из возможных решений этой проблемы может быть отслеживание последнего внутреннего 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%28java.lang.String,%20boolean%29

person Steven Skelton    schedule 21.06.2011
comment
В итоге я сделал именно это. Я создал свой собственный класс под названием CustomBrowsingHistory, который, по сути, просто записывал страницы, которыми я тоже был, но был запрограммирован на игнорирование определенных случаев. Все равно спасибо. - person Woody; 22.06.2011

У меня была похожая, но немного другая проблема. Специальные ссылки в 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
   }
}
person Yuriy    schedule 05.06.2012