2011-06-14 76 views
1

我在我的应用程序中有一个BrowserField,效果很好。它拦截NavigationRequests到我的网站上的链接去到外部网站,并带来了一个新的窗口来显示常规浏览器,这也很好。编辑BrowserField的历史

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

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

回答

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)

+0

我最终这样做了。我创建了自己的类CustomBrowsingHistory,它本质上只记录了我曾经的页面,但被编程为忽略特定情况。不过谢谢。 – Woody 2011-06-21 20:41:30

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 
    } 
}