2013-06-15 4 views
1

Я разрабатываю апплет LibGDX, и я хочу получить доступ к файлам cookie, установленным JavaScript. Я не могу использовать JSObject window = JSObject.getWindow(this);, так как я создаю апплет следующим образом (вы можете это знать).Доступ к файлам cookie из апплета LibGDX

public class MainApplet extends LwjglApplet { 
    private static final long serialVersionUID = 1L; 
    public MainApplet() { 
     super(new TitansArena(), false); 
    } 
} 

Как я могу получить доступ к файлам cookie?

EDIT:

Я хочу, чтобы получить доступ к JavaScript в моем TitansArena классе. Для этого мне нужно получить доступ к апплету от TitansArena, но я не могу получить ссылку на него. Мне нужен способ доступа к апплету внутри TitansArena, поэтому я могу создать ссылку на объект окна документа html.

+0

Не могли бы вы более подробно объяснить проблемы «не использовать JSObject»? (Что/где вы это пробовали?) –

+0

Я отредактировал вопрос: D – Romeo

+2

Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). Обратите внимание, что попытка получить ссылку на 'JSObject' обычно терпит неудачу, если вызывается из конструктора или' init() '. Его можно получить в методе 'start()'. –

ответ

1

Я не уверен, о специфике JSObject API, но в целом с Libgdx приложениями так, как вы получите доступ от платформы независимого кода (TitansArena в данном случае) из к платформе зависимого коду (MainApplet в данном случае) создать интерфейс и передать экземпляр, реализующий этот интерфейс. См. https://code.google.com/p/libgdx/wiki/ApplicationPlatformSpecific

В частности, вы можете сделать что-то вроде этого: создать новый интерфейс под названием SaveState с помощью метода save(String). Добавьте новый статический внутренний класс к MainApplet (например, AppletSaveState), который реализует этот интерфейс и передает новый экземпляр его в конструктор TitansArena (добавьте параметр конструктора с типом SaveState). Теперь ваш независимый от платформы код может вызывать save на объект, переданный в конструктор, а затем вы будете в контексте MainApplet, где вы можете использовать JSObject и его методы.

Oi, из-за звонка super, его несколько раздражает настройка. Я думаю, что ленивая инициализация указателя с экземпляра SaveState обратно на MainApplet сделает это. Что-то вроде:

public class MainApplet extends LwjglApplet { 
    public static final long serialVersionUID = 1L; 

    public final SaveState saver = new AppletSaveState(); 

    public MainApplet() { 
     super(new TitansArena(saver), false); 
     saver.appletContext = this; // fixup saver instance to point necessary context 
    } 
} 
+0

Дело в том, что я не могу передать это конструктору. 'Не могу ссылаться на это 'или' супер ', явно ссылаясь на конструктор.' – Romeo

+0

А, хорошо ... Я обновлю свое решение. :) –

Смежные вопросы