我正在使用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代码中它不会工作。我发现了这些问题:
如果有人知道这些问题的解决方案(或实现我想要做的事情的另一种方法),请非常感谢。提前谢谢。
答案 0 :(得分:1)
你需要做一些额外的工作。因为您描述的方法仅在编译时起作用。编译后,GWT方法名称消失了,因为它们被混淆了。但是有一个库可以帮助您解决这个问题:gwt-exporter