0

在 RCP 应用程序中,我在 SWT 浏览器中显示基于 GWT 的 Web 应用程序。

我的目标是从 GWT 应用程序中调用 Java 方法。

据我了解,最简单的方法是使用 SWT BrowserFunction,它注入了一个 java 方法,我可以从 web 应用程序中调用该方法。

由于某种原因,我无法让它工作......

在 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); 
                    } 
            }; 
    } 

在我的 GWT EntryPoint 作为 onModuleLoad 的一部分,我正在调用方法:

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)
 }
}-*/

GWT 编译的 JS 代码通常运行在一些单独的上下文中(例如 iframe),所以$wnd当你需要调用外部函数时,你必须显式指定要从父窗口(对象)调用函数。

于 2012-04-13T10:37:55.380 回答