2011-06-14 101 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 
    } 
}