我正在使用 GWT 构建一个 Web 应用程序,我希望让用户能够通过某种 Javascript API 来扩展其功能,该 API 将与用 GWT 编写的应用程序核心进行交互。基本上,这个 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 树并验证变量确实包含函数。
- 似乎我总是必须附加“窗口”。前缀,因为 var 是在 window 对象中创建的。这是一个相当令人担忧的问题,因为强迫用户每次想要调用函数时都这样写真的很乏味。
如果有人知道这些问题的解决方案(或实现我想要做的事情的替代方法),我将非常感激听到。提前致谢。