从手写的Javascript调用GET方法

时间:2011-10-20 10:50:12

标签: javascript gwt methods call jsni

我正在使用GWT构建一个Web应用程序,我想让用户能够通过某种Javascript API扩展其功能,这些API将与GWT中编写的app核心进行交互。基本上,这个JS API将映射到我可以执行实际工作的一些GWT内部方法。

所以,为了达到这个目的,我在GWT JSNI官方文档中读到了一个技巧,它包括从GWT创建一个全局JS变量并为其分配一个实际GWT方法的调用。然后我会通过这个变量在我的手写JS代码中调用。

不幸的是我无法让它工作(该示例包含语法错误,我不确定它是否已经过测试)。做了更多的研究,我在这个网站上发现了一个类似的解决方案,它为JS var指定了一个匿名函数来进行调用。它看起来像这样:

/*GWT code that assigns the anonymous function*/

private static native void loadWrapper() /*-{
    $wnd.showMessage =
        $entry(@com.Glob3Mobile.client.TestApi::msgBox());
}-*/;

public static void msgBox() {
    Window.alert("hello");
}

这个解决方案看起来很有希望,但我还没能让它发挥作用。当我做“window.showMessage();”在我的手写JS代码中它不会工作。我发现了这些问题:

  • window.showMessage似乎已经创建,但JS控制台说它不是一个函数,即使我检查了dom树并验证了变量确实包含一个函数。
  • 好像我总是要追加“窗口”。 preffix,因为var是在window对象中创建的。这是一个相当令人担忧的问题,因为每次他们想要调用函数时强迫用户这样写是非常繁琐的。

如果有人知道这些问题的解决方案(或实现我想要做的事情的另一种方法),请非常感谢。提前谢谢。

1 个答案:

答案 0 :(得分:1)

你需要做一些额外的工作。因为您描述的方法仅在编译时起作用。编译后,GWT方法名称消失了,因为它们被混淆了。但是有一个库可以帮助您解决这个问题:gwt-exporter