0

RCP アプリケーションで、SWT ブラウザーに GWT ベースの Web アプリケーションを表示しています。

私の目標は、GWT アプリケーション内から Java メソッドを呼び出すことです。

私が理解している最も簡単な方法は、Web アプリケーション内から呼び出すことができる Java メソッドを挿入する SWT BrowserFunction を使用することです。

何らかの理由で、私はそれを機能させることができません...

RCP では、次のように定義しました

public class GWTBrowserView extends ViewPart { 
    private GWTBrowser browser; 

    @Override 
    public void createPartControl(final Composite parent) { 
            this.browser = new GWTBrowser(parent, SWT.NONE); 
            this.browser.setUrl("url of gwt app"); 
            new BrowserFunction(this.browser, "onGWTEvent") { 

                    @Override 
                    public Object function(final Object[] arguments) { 
                            // Do something fancy
                            return super.function(arguments); 
                    } 
            }; 
    } 

onModuleLoad の一部として GWT EntryPoint でメソッドを呼び出しています。

private native void fireRCPEvent(String rcpEventJSON) /*-{
try{
    onGWTEvent(rcpEventJSON);
} catch(e) {
    alert(e.message)
}

SWT ブラウザを介して GWT と RCP 間の通信を確立する方法はありますか?

4

1 に答える 1

2

JSNI から間違った関数を呼び出しています。そのはず:

private native void fireRCPEvent(String rcpEventJSON) /*-{
 try{
    $wnd.onGWTEvent(rcpEventJSON); //notice the usage of $wnd object
 } catch(e) {
    alert(e.message)
 }
}-*/

$wndGWT でコンパイルされた JS コードは通常、分離されたコンテキスト (iframe など) で実行されるため、外部関数を呼び出す必要がある場合は、親ウィンドウ (オブジェクト) から関数を呼び出すことを明示的に指定する必要があります。

于 2012-04-13T10:37:55.380 に答える