我知道以下在 GWT 中是相同的:
Window and $wnd
Document and $doc
除了第一个用在Java中,第二个用在JSNI(JavaScript)之外,还有什么区别吗?
我知道以下在 GWT 中是相同的:
Window and $wnd
Document and $doc
除了第一个用在Java中,第二个用在JSNI(JavaScript)之外,还有什么区别吗?
Window
是一个包含大量静态方法的类,您可以使用它来获取或设置浏览器窗口的某些属性,但实际上它不是本机浏览器窗口对象。这些方法实现最终JSNI
是使用$wnd
变量设置/获取这些属性的块。就像Window.alert()
谁的实现将是$wnd.alert()
. 请注意,Window.java
它无法访问浏览器窗口对象中的所有内容,例如window.console
等。
GWT 使用$wnd
而不是window
因为编译的代码在 iframe 中正常执行,并且在这种情况下,window
将引用 iframe 窗口,而$wnd
将引用父窗口。iframe$doc
中对父文档的引用也是如此。
另一边Document
是一个扩展的java类JavaScriptObject
,这意味着它是一个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)。