2011-01-26 2 views
2

Я делаю приложение Blackberry с помощью RIM JRE 6. При создании браузера впервые создается файл cookie. В определенный момент (в зависимости от пользовательского ввода) файл cookie должен быть удален. Для этого я открываю BrowserField, и я пытаюсь удалить файлы cookie, хранящиеся в BrowserField. В настоящее время нет методов, которые мне известны в RIM api, чтобы явно удалять файлы cookie для BrowserField, поэтому я использую метод executeScript, заданный в классе BrowserField, чтобы выполнить некоторый javascript для удаления файлов cookie. Javascript выполняется в методе onUiEngineAttached перед запуском метода requestContent. Но это приводит к сбою этого приложения с 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); 
    } 
}; 

Это могло быть проблемой потоковая, но я не уверен, как это исправить. Поэтому любая помощь приветствуется.

спасибо.

ответ

0

Я еще не использовал интерфейс BrowserFieldCookieManager, но вы пытались вызвать setCookie (url, null) или setCookie (url, "") в менеджере файлов cookie, чтобы очистить cookie? Я понимаю, что API-документы в этой области разрежены. Если ни один из них не работает, попробуйте заменить файл cookie тем, чье время истекло.

Другой альтернативой является замена вашего собственного менеджера файлов cookie при создании экземпляра BrowserField. Смотрите документацию для BrowserFieldConfig:

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

+0

Спасибо за помощь снова Эрик:). Установка cookie как null просто приводит к тому, что исключение NullPointerException при установке значения в значение «" просто приводит к созданию нового файла cookie, не создаваемого над другими. Установка cookie с помощью setCookie (url, "testCookie = 123; expires = Thu, 01-Jan-70 00:00:01 GMT;"); ничего не делает для состояния файлов cookie в браузере. Я не уверен, как можно настроить пользовательский менеджер файлов cookie, поскольку BrowserFieldConfig только, кажется, принимает предварительно сконфигурированные менеджеры файлов cookie. –

0

Ну, я не могу помочь вам с BrowserFieldCookieManager, но здесь очень полезный сайт, который заставил меня начать и снабжали сценарии я использовал для управления печенья (если ничего другого она должна дать вы понимаете, что делает BrowserFieldCookieManager за кулисами и как заставить его делать то, что вы хотите).

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

Особенно смотрят на то, как он удаляет куки, заменяя их пустыми печеньем, которые истекают мгновенно.

0

Другой способ не использовать cookies вообще, если это ваше намерение, заключается в использовании этого свойства внутри BrowserFieldConfig.

BrowserFieldConfig config = new BrowserFieldConfig(); 
config.setProperty(BrowserFieldConfig.ENABLE_COOKIES, Boolean.FALSE); 
Смежные вопросы