2016-11-29 1 views
1

Нажатие кнопки ничего не делает, но почему.Вызов метода Java через Javascript, не работающий в симуляторе

Нажмите на кнопку, чтобы напечатать «[Javascript Logger] Aha».

Здесь код:

public class FormNotCalled extends Form { 
    public FormNotCalled() { 
     setTitle("FormNotCalled"); 
     setLayout(new BorderLayout()); 
     setScrollable(false); 
     BrowserComponent browserComponent = new BrowserComponent(); 
     browserComponent.setPage(
       "<html lang=\"en\\\">\n" + 
       " <body >\n" + 
       "  <button onclick=\"logger.log('Aha');\">Click me</button>\n" + 
       " </body>\n" + 
       "</html>", 
       null); 
     getContentPane().add(BorderLayout.CENTER, browserComponent); 
     JavascriptContext javascriptContext = new JavascriptContext(browserComponent); 
     JSObject logger = (JSObject)javascriptContext.get("{}"); 
     logger.set("log", new JSFunction() { 
      public void apply(JSObject self, Object[] args) { 
       String msg = (String)args[0]; 
       Log.p("[Javascript Logger] " + msg); 
      } 

     }); 
     javascriptContext.set("window.logger", logger); 
    } 
} 
+0

Возможно, вам нужен установленный регистратор перед вызовом setPage? –

ответ

1

setPage() является асинхронным. Вам нужно подождать, пока страница не будет загружена, прежде чем регистрировать на ней функции. Самый простой способ сделать это - внутри события onLoad.

например.


browserComponent.addWebEventListener(e->{ 
     JSObject logger = (JSObject)javascriptContext.get("{}"); 
     logger.set("log", new JSFunction() { 
      public void apply(JSObject self, Object[] args) { 
       String msg = (String)args[0]; 
       Log.p("[Javascript Logger] " + msg); 
      } 

     }); 
     javascriptContext.set("window.logger", logger); 
}); 
+0

Выполнение инициализации на OnLoad не делает изменения:. \t \t \t browserComponent.addWebEventListener ("OnLoad", (е) -> Display.getInstance() callSerially (() -> { \t \t \t \t JavascriptContext javascriptContext = новый JavascriptContext (browserComponent); \t \t \t \t JSObject регистратор = (JSObject) javascriptContext.get ("{}"); \t \t \t \t logger.set ("журнал", новый Функция JsFunction() { \t \t \t \t public void apply (JSObject self, Object [] args) { \t \t \t \t String msg = (String) args [0]; \t \t \t \t Log.p ("[Javascript Logger]" + msg); \t \t \t \t} \t \t \t \t \t \t}); \t \t \t \t javascriptContext.set ("window.logger", logger); \t \t \t})); –

+0

Удивительно, когда вы загружаете HTML через 'com.codename1.ui.BrowserComponent.setURLHierarchy (String)' он работает, но генерирует исключение FileNotFound –

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