2013-10-19 2 views
6

나는 다음과 같은 것을 알고는 GWT에서 동일의 일종이다 JSNI (JavaScript)에서?

답변

11

Window은 브라우저 윈도우의 특정 속성을 가져 오거나 설정하는 데 사용할 수있는 정적 메서드가 많이 있지만 실제로는 기본 브라우저 창 개체가 아닙니다. 이러한 메소드 구현은 결과적으로 해당 속성을 설정/가져 오기 위해 $wnd 변수를 사용하는 JSNI 블록입니다. Window.alert()처럼 구현은 $wnd.alert()이됩니다. Window.javawindow.console

GWT와 같은 브라우저의 창 개체의 모든 액세스가 발생하지 않는 것을 참고 컴파일 된 코드는 iframe에 정상적으로 실행되기 때문에 $wnd 대신 window으로 사용하고, 이러한 맥락에서, window는 iframe이 창을 참조합니다 $wnd은 상위 창을 참조합니다. 부모 문서에 대한 iframe의 참조 인 $doc에서도 마찬가지입니다. 다른 측면 Document에서

는 기본 자바 스크립트를 수정하지 않습니다, 그것은 기본적으로 네이티브 자바 스크립트 객체에 대한 특별한 래퍼 것을 의미 Overlay 유형이 있음을 의미 JavaScriptObject를 확장하는 자바 클래스이지만 추가 그것과 상호 작용하는 자바 메소드 세트. jsni로 전달할 때 안전하게 캐스팅 할 수 있습니다. 그것은 그들이 그렇지 않으면 Window$wnd의 오버레이 아니라, 동일합니다 컴파일 할 때 자바 세계에서 동일하지 Document$doc 있지만 요약

은, 그것은 브라우저의 특정 메서드에 액세스 단지 방법입니다 창문.

GWT 컴파일 코드가 네이티브 js 개체 및 메서드에 위임되었지만 js와 java 개체 사이의 유사점을 찾지 마십시오. GWT는 Java 객체, 위젯, 패턴 등을 사용하여 ajax 애플리케이션을 개발하는 API를 설계했다. 일부 객체와 메소드의 이름은 같은 방식으로 지정되었지만 API는 거의 다르다. 하지만 자바를 컴파일하여 자바와 자바 스크립트를 컴파일하는 프로젝트는 ST-JS과 같은 실험적인 라이브러리 인 Elemental을 제공하며 API는 자바 스크립트와 거의 동일합니다 (Chrome에서만 사용 가능).