解决方法
Window是一个类很多静态方法,您可以使用它来获取或设置浏览器窗口的某些属性,但实际上它不是本机浏览器窗口对象.这些方法实现最终是JSNI块,它使用$wnd变量来设置/获取这些属性.像Window.alert()一样,它的实现是$wnd.alert().请注意,Window.java无法访问浏览器窗口对象中的所有内容,如window.console等.
GWT使用$wnd而不是window,因为编译的代码通常在iframe中执行,在这种情况下,window将引用iframe窗口,而$wnd将引用父窗口. $doc也是如此,它是iframe到父文档的引用.
另一方面Document是一个扩展JavaScriptObject的java类,它意味着它是一个Overlay类型,这基本上意味着它是一个原生javascript对象的特殊包装器,它不修改底层JavaScript但添加了一组java方法与它互动.传递给jsni时可以安全地施放.
总之,尽管Document和$doc在java世界中并不相同,但在编译它们时它们是相同的,否则Window它不是$wnd的叠加,它只是一种访问浏览器窗口的某些方法的方法.
虽然GWT编译代码委托给本机js对象和方法,但不要试图找到js和java对象之间的相似之处. GWT设计了一个API来使用一组java对象,小部件,模式等来开发ajax应用程序.一些对象和方法以相同的方式命名,但几乎API都不同.但是,其他项目将java编译为javascript,这两个世界在ST-JS之间具有严格的并行性,而GWT提供了一个名为Elemental的实验库,其API几乎与javascript相同(它仅适用于Chrome).