1

我的应用程序中有一个 BrowserField,效果很好。它拦截我网站上指向外部站点的链接的 NavigationRequests,并打开一个新窗口以在常规浏览器中显示这些链接,这也很有效。

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

如果我没有很好地解释问题,请不要犹豫澄清。谢谢

4

2 回答 2

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)

于 2011-06-21T20:07:55.453 回答
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
   }
}
于 2012-06-05T13:32:40.530 回答