Как вызвать функции javascript из нативной Blackberry?

Я разрабатываю приложение, в котором мне нужно вызвать некоторые методы из BlackBerry для javascript.

когда я нажимаю на событие нажатия клавиши «Назад», я хочу вызвать метод onBackKeyDown(), который объявлен в javascript.

Main.java

protected boolean keyDown(int keycode, int time) {
    // TODO Auto-generated method stub

    if(Keypad.key(keycode) == Keypad.KEY_ESCAPE)
    {
           // onBackKeyDown(); 
         // i want to call the following method which is declared in main.js file 
        Dialog.alert("this is back button");        
        return true;

    }
    return super.keyDown(keycode, time);
}

main.js

 function onBackKeyDown() {
   try {
       if ($.mobile.activePage.is("#Page1")) {
         $.mobile.changePage("#page5");
        } else if ($.mobile.activePage.is("#page2")) {
           $.mobile.changePage("#main");
       } else if ($.mobile.activePage.is("#page3")) {
           $.mobile.changePage("#main");
       } else if ($.mobile.activePage.is("#main")) {
           navigator.app.exitApp();
       }
} catch(e) {
    alert("Exception:ConsoleLog.log:" + e);
}

}

Поскольку у меня есть идея, что при использовании "extendScriptEngine" методы, объявленные в javascript, вызываются в родном. Но вот как вызывать методы в javascript, которые являются родными в соответствии с моим приведенным выше кодом... кто-нибудь может помочь мне с этим...


person code_finder    schedule 25.07.2012    source источник


Ответы (1)


Вы не показываете этот код, но я должен предположить, что ваше приложение имеет некоторое Screen, содержащее какое-то поле браузера, которое отображает HTML-контент.

Я не могу сказать вам наверняка, не видя этого кода, но я бы порекомендовал использовать net.rim.device.api.browser.field2.BrowserField (поле браузера 2), если ваше приложение должно поддерживать только ОС 5.0 и выше.

Если вам необходимо поддерживать ОС меньше 5.0, Я не знаю, как это сделать.

Во всяком случае, с этим 5.0+ BrowserField вы можете сделать это:

BrowserFieldConfig config = new BrowserFieldConfig();
config.setProperty(BrowserFieldConfig.JAVASCRIPT_ENABLED, Boolean.TRUE);  // should be the default

// Browser basic initialization
BrowserField _browserField = new BrowserField(config);

а потом

protected boolean keyDown(int keycode, int time)
{
    if(Keypad.key(keycode) == Keypad.KEY_ESCAPE)
    {
        // i want to call the following method which is declared in main.js file 
        _browserField.executeScript("onBackKeyDown()");
        Dialog.alert("this is back button");        
        return true;

    }
    return super.keyDown(keycode, time);
}
person Nate    schedule 25.07.2012