窗口,文档与$ wnd,$ doc

时间:2013-10-19 17:31:59

标签: java javascript dom gwt

我知道以下是GWT中的某种相同内容:

Window and $wnd
Document and $doc

除了第一个用于Java而第二个用于JSNI(JavaScript)之外,是否有任何差异?

1 个答案:

答案 0 :(得分:11)

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它不是{{1}的重叠它只是一种访问浏览器窗口的某些方法的方法。

虽然GWT编译代码委托给本机js对象和方法,但是不要试图找到js和java对象之间的相似之处。 GWT设计了一个API来使用一组java对象,小部件,模式等来开发ajax应用程序。一些对象和方法以相同的方式命名,但几乎API都不同。但是,其他项目将java编译为javascript,它在ST-JS这两个世界之间具有严格的并行性,而GWT提供了一个名为Elemental的实验库,其API几乎与javascript相同(它仅适用于javascript)铬)。