2011-01-26 86 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);