编辑BrowserField的历史记录

时间:2011-06-14 16:54:38

标签: blackberry browser-history browserfield

我的应用中有一个BrowserField,效果很好。它拦截了NavigationRequests到我网站上链接到外部网站的链接,并打开一个新的窗口来显示常规浏览器中的那些,这也很有效。

我遇到的问题是,如果用户点击链接说“www.google.com”,我的应用会在新的浏览器中打开它,但也会将其记录到BrowserHistory中。因此,如果他们点击回来,远离谷歌,他们会回到我的应用程序,但如果他们再次回击,浏览器历史记录将把他们放在他们所在的同一页面上(因为从谷歌回来不会回到历史)我试图找到一种方法来编辑BrowserField的BrowserHistory,但这似乎不可能。如果没有创建我自己的类来记录浏览历史记录,我能做些什么吗?

如果我没有做好解释问题的工作,请不要犹豫澄清。 感谢

2 个答案:

答案 0 :(得分:2)

此问题的一种可能解决方案是跟踪在当前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)

答案 1 :(得分:1)

我有一个类似但有点不同的问题。 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
   }
}