2011-01-26 123 views
2

我正在使用RIM JRE 6製作Blackberry應用程序。第一次創建BrowserField時,會創建一個cookie。在某個時刻(取決於用戶輸入),Cookie必須被刪除。爲此,我打開一個BrowserField,並試圖刪除存儲在BrowserField中的Cookie。目前,我不知道在RIM api中提供的方法顯式刪除BrowserField的cookie,因此我使用BrowserField類中給出的executeScript方法執行一些JavaScript來刪除Cookie。在運行requestContent方法之前,javascript會在onUiEngineAttached方法中執行。但是,這會導致應用程序與一個IllegalStateException和消息崩潰:BrowserField Cookie刪除

無法執行腳本 - 腳本引擎不存在

我不相信這是沒有被初始化,如JavaScript的結果因爲它應該默認從BrowserFieldConfig類開啓。我不確定是否正確格式化我的JavaScript。這是我正在使用的代碼:

protected void onUiEngineAttached(boolean attached) 
{ 
    if(attached) 
    { 
        // ... Removed unnecessary code 
     // Retrieve the cookie manager for the embedded browser 
     BrowserFieldCookieManager cookieManager = _browserField.getCookieManager(); 
     if (eraseCookie == true) 
     { 
      String temp = cookieManager.getCookie ("someSite"); 
      while (temp.indexOf ("testCookie") != -1) 
      { 
        _browserField.executeScript("javascript:document.cookie = \"testCookie=; expires=Thu, 01-Jan-70 00:00:01 GMT\""); 
      } 
     } 
     // Requests browser to go to URL with body and header information 
     _browserField.requestContent(_url, _body.getBytes(), _header); 
    } 
}; 

它可能是一個線程問題,但我不知道如何解決這個問題。所以,任何幫助表示讚賞。

謝謝。

回答

0

我還沒有使用BrowserFieldCookieManager接口,但是您是否嘗試過在cookie管理器上調用setCookie(url,null)或setCookie(url,「」)來清除cookie?我意識到API文檔在這個領域很少。如果這兩者都不起作用,請嘗試將cookie替換爲已經過期的cookie。

另一種選擇是在創建BrowserField實例時替換您自己的Cookie管理器。請參閱該文檔爲BrowserFieldConfig:

http://www.blackberry.com/developers/docs/5.0.0api/net/rim/device/api/browser/field2/BrowserFieldConfig.html

+0

再次感謝您的幫助Eric:)。將cookie設置爲null只會導致拋出NullPointerException,而將值設置爲「」只會導致創建一個沒有值的新cookie。使用setCookie設置cookie(url,「testCookie = 123; expires = Thu,01-Jan-70 00:00:01 GMT;」);對瀏覽器中cookies的狀態沒有任何作用。我不確定如何設置自定義Cookie管理器,因爲BrowserFieldConfig似乎只接受預先配置的Cookie管理器。 – 2011-01-28 02:44:15

0

嗯,我不能幫你BrowserFieldCookieManager但這裏是一個非常有用的網站,讓我開始並提供我已經使用cookie管理腳本(如果不出意外也應該給你瞭解BrowserFieldCookieManager在幕後做了些什麼,以及如何讓它做你想做的事情)。

http://www.quirksmode.org/js/cookies.html

特別是看它是如何刪除的cookie,通過與到期瞬間空餅乾替換它們。

0

根本不使用cookies的另一種方法是,如果這是您的意圖,則使用BrowserFieldConfig內的此屬性。

BrowserFieldConfig config = new BrowserFieldConfig(); 
config.setProperty(BrowserFieldConfig.ENABLE_COOKIES, Boolean.FALSE);