0

ブラックベリーネイティブからjavascriptまでいくつかのメソッドを呼び出す必要があるアプリを開発しています。

バック キー ダウン イベントをクリックすると、javascript で宣言されているonBackKeyDown()メソッドをトリガーしたいと考えています。

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のメソッドを呼び出す方法...誰でもこれで私を助けてくれます...

4

1 に答える 1

0

このコードは表示されていませんが、アプリにはScreen、HTML コンテンツを表示する何らかの種類のブラウザー フィールドを含むものがあると想定する必要があります。

そのコードを見ないとはっきりとは言えませんがnet.rim.device.api.browser.field2.BrowserField、アプリが OS 5.0 以降のみをサポートする必要がある場合は、(Browser Field 2) を使用することをお勧めします。

OS 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);
}
于 2012-07-25T21:06:55.937 に答える