BrowserField Cookie删除

时间:2011-01-26 23:07:34

标签: java javascript blackberry java-me

我正在使用RIM JRE创建一个Blackberry应用程序6.第一次创建BrowserField时,会创建一个cookie。在某个时刻(取决于用户输入),必须删除cookie。为此,我打开一个BrowserField,我正在尝试删除存储在BrowserField中的cookie。目前,我没有在RIM api中提供的方法明确删除BrowserField的cookie,因此我使用BrowserField类中给出的executeScript方法执行一些javascript来删除cookie。在运行requestContent方法之前,javascript在onUiEngineAttached方法中执行。但是这会导致应用程序崩溃并出现IllegalStateException和消息:

  

无法执行脚本 - 脚本引擎不存在

我不相信这是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);
    }
};

这可能是一个线程问题,但我不知道如何解决这个问题。所以任何帮助都表示赞赏。

谢谢。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

嗯,我无法帮助你使用BrowserFieldCookieManager,但是这是一个非常有用的网站,让我开始并提供了我用于cookie管理的脚本(如果没有别的,它应该让你知道BrowserFieldCookieManager在幕后做什么以及如何让它做你想做的事。)

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

特别关注它如何删除cookie,将其替换为即时过期的空cookie。

答案 2 :(得分:0)

如果您的意图是完全不使用cookie的另一种方法是在BrowserFieldConfig内使用此属性。

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